Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[AWT]Toolkit#getDefaultToolkit() liefert null

0 views
Skip to first unread message

Stephan Friedrichs

unread,
Nov 16, 2001, 1:34:28 PM11/16/01
to
Hallo zusammen,
Ich verzweifle gerade bei dem Versuch an eine Toolkit-Instanz
heranzukommen und dachte mir ihr wisst vielleicht weiter... Ich habe in
einem Applet folgendes probiert:

try{
[...]
Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
[...]
}catch(Exception exc){
[...]
System.out.println("tool: "+(defaultToolkit==null));
[...]
}

Der Appletviewer spuckt folgendes über die Standartausgabe aus:

tool: true

Da sonst nix funktioniert, was über die Toolkit-Instanz laufen soll (im
try-Block), und defaultToolkit==null true ist habe ich doch wohl einen
NullPointer, oder?
Hat evtl. jemand eine Idee woran das liegt? Muss ich erst 'ne AWT-Klasse
benutzen, bevor ich ein Toolkit kriege? Oder dürfen Applets das
wiedermal nicht?

Im Vorraus schonmal schönen Dank für die Hilfe - Stephan

P.S.: Ich hoffe das ist keine allzublöde Frage, ich habe wenig Erfahrung
mit awt...

Paul Ebermann

unread,
Nov 16, 2001, 1:52:27 PM11/16/01
to
> Hallo zusammen,
> Ich verzweifle gerade bei dem Versuch an eine Toolkit-Instanz
> heranzukommen und dachte mir ihr wisst vielleicht weiter... Ich habe in
> einem Applet folgendes probiert:
>
[...]

Versuch mal lieber:

try {
Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
}catch(Exception exc){
exc.printStackTrace();
}

Mit der Ausgabe können wir dir hier besser helfen.
Ich vermute ein Sicherheitsproblem.

Paul

Stephan Friedrichs

unread,
Nov 16, 2001, 3:21:02 PM11/16/01
to
> Versuch mal lieber:
>
> try {
> Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
> }catch(Exception exc){
> exc.printStackTrace();

[...]
Hast Recht! defaultToolkit ist null, weil es erst nach dem Ursprung der
Exception initialisiert wird. Hier mal die ganze Methode (soll Bilder laden,
wenn möglich aus einem jar-archiv) - Achja, den Code hat hier jemand, etwas
anders, neulich gepostet. Hier ist das, was ich daraus gemacht habe :) :

public Image getImage(String imageName) {
MediaTracker tracker = new MediaTracker(this);
Image rtn = null;
DataInputStream in = null;
Toolkit defaultToolkit = null;
try{
in = new DataInputStream(getClass().getResourceAsStream(imageName));
byte[] data = new byte[in.available()];
in.readFully(data);
in.close();
defaultToolkit = Toolkit.getDefaultToolkit();
rtn = defaultToolkit.createImage(data);
}catch(Exception exc){
rtn = getImage(getCodeBase(), imageName);
System.out.println("Image not from jar: "+exc.getMessage());
System.out.println("rtn: "+(rtn==null));
System.out.println("in: "+(in==null));
System.out.println("tool: "+(defaultToolkit==null));
exc.printStackTrace();
}
tracker.addImage(rtn, 0);
try{
tracker.waitForAll(8000);
}catch(Exception exc){
System.out.println("Problems in getImage(String): "+exc.getMessage());
}
return rtn;
}

Das Ding spuckt folgendes aus:

[...]
Image not from java: null
rtn: false
in: false
tool: true
java.lang.NullPointerException
at java.io.FilterInputStream.available(...)
at games.engine.SpriteEngine.getImage(dieZeileMitAvailable)
// Mein Programm
at // Meine aufrufende Klasse
at sun.applet.AppletPanel.run(...)
at java.lang.Thread.run(...)
[...]


Dann liegt's wohl am Stream was? Aber vom Server darf ich doch Daten laden
und erst recht aus dem jar-archive, wo die Klassen drin sind, ne? Oder
'denkt' der Appletviewer das ich auf lokale Sources zugreife? Ich meine, wenn
ich sonst lokal teste, geht das auch...

mFg - Stephan

Christian Kaufhold

unread,
Nov 16, 2001, 3:29:44 PM11/16/01
to
Hallo!

Stephan Friedrichs <SFrie...@t-online.de> wrote:

> try{
> [...]
> Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
> [...]
> }catch(Exception exc){
> [...]
> System.out.println("tool: "+(defaultToolkit==null));
> [...]
> }

[gibt true]


Das kann nicht der wirkliche Code sein, denn so compiliert das wahr-
scheinlich nicht, und das defaultToolkit, das im "try"-Block ver-
wandt wird, ist auf jeden Fall nicht das des "catch"-Blocks.

Toolkit.getDefaultToolkit() sollte bei Fehler immer AWTError werfen
und keine Exception, auf jeden Fall solltest du einmal, wie Paul
geschrieben hat, die Exception inspizieren.

Falls getDefaultToolkit() wirklich fehlschlagen sollte, dürfte die
JVM allerdings schon ziemlich früh (bevor das Applet überhaupt erzeugt
wird?) sterben, so daß ich das eigentlich nicht glauben kann.


Christian
--
NP: BAP - Istanbul
NR: Patricia Highsmith - Mermaids on the Golf Course

0 new messages