ubuntuusers.de

[Java]AWT-Elemente werden nicht dargestellt

Status: Gelöst | Ubuntu-Version: Ubuntu 9.10 (Karmic Koala)
Antworten |

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

Wenn ich das java aus Open-JDK verwende klappt es nicht, auch nicht wenn ich symbolische Links zur fehlenden mawt.so-Datei anderweitig erzeuge. Das ändert die Fehlermeldung, aber hilft nicht weiter.

Hast Du mal probiert das Sun-SDK zu installieren?

greenmoon

(Themenstarter)

Anmeldungsdatum:
10. März 2010

Beiträge: 269

Vain schrieb:

Workaround für dich könnte also sein: Debug-Modus mal anschalten. 😬

Damit funktionieren in der Tat wieder alle Projekte, aber dass ist ja eigentlich nicht so, wie es sein sollte. Aber es klappt ☺

user unknown schrieb:

Bei dieser Meldung würde ich erst mal sehen, ob die Bibliothek denn überhaupt da ist:

ls -l /usr/lib/jvm/java-6-openjdk/jre/lib/i386/motif21/libmawt.so

Bei mir ist der Pfad ein anderer:

locate libmawt 
/usr/lib/jvm/java-6-openjdk/jre/lib/i386/headless/libmawt.so
/usr/lib/jvm/java-6-sun-1.6.0.16/jre/lib/i386/headless/libmawt.so
/usr/lib/jvm/java-6-sun-1.6.0.16/jre/lib/i386/motif21/libmawt.so
/usr/lib/jvm/java-6-sun-1.6.0.16/jre/lib/i386/xawt/libmawt.so

Bei mir auch ☺

marvin@Morpheus:~$ ls -l /usr/lib/jvm/java-6-openjdk/jre/lib/i386/motif21/libmawt.so
ls: Zugriff auf /usr/lib/jvm/java-6-openjdk/jre/lib/i386/motif21/libmawt.so nicht möglich: No such file or directory
marvin@Morpheus:~$ locate libmawt 
/usr/lib/jvm/java-6-openjdk/jre/lib/i386/headless/libmawt.so
/usr/lib/jvm/java-6-openjdk/jre/lib/i386/xawt/libmawt.so
/usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/i386/headless/libmawt.so
/usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/i386/motif21/libmawt.so
/usr/lib/jvm/java-6-sun-1.6.0.15/jre/lib/i386/xawt/libmawt.so

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

Und wenn Du das Sun-Java benutzt:

/usr/lib/jvm/java-6-sun-1.6.0.15/jre/bin/java -cp ...

(nein, nicht die 3 Pünktchen so hinschreiben).

greenmoon

(Themenstarter)

Anmeldungsdatum:
10. März 2010

Beiträge: 269

Wenn das gemeint war:

marvin@Morpheus:~/Dokumente/Schule/Informatik/Jahrgangsstufe12/Projekte/test/src$ /usr/lib/jvm/java-6-sun-1.6.0.15/jre/bin/java -cp ~/Dokumente/Schule/Informatik/Diverses/basis.jar:. test

dann passiert wieder das gleiche:

  • Ohne "Einstellungen.setDebugModus(true);" leeres Fenster mit schwarzen Kästchen

  • Mit "Einstellungen.setDebugModus(true);" wird das Terminal etwas zugespammt und danach wird das Fenster richtig angezeigt.

€: Wieder was dazu gelernt.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

greenmoon schrieb:

dann passiert wieder das gleiche: * Ohne "Einstellungen.setDebugModus(true);" leeres Fenster mit schwarzen Kästchen

Das ist mir rätselhaft.

* Mit "Einstellungen.setDebugModus(true);" wird das Terminal etwas zugespammt und danach wird das Fenster richtig angezeigt.

Den Debugmodus kann ich auch aktivieren, aber es funktioniert bei mir auch so.

€: Entschuldigt bitte die Formatierung, aber die Zeilenumbrüche werden aus irgendwelchen Gründen gelöscht.

Im Editfenster ist oben rechts ein Link "Hilfe zur Syntax". Da wird's erklärt.

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

user unknown schrieb:

greenmoon schrieb:

dann passiert wieder das gleiche: * Ohne "Einstellungen.setDebugModus(true);" leeres Fenster mit schwarzen Kästchen

Das ist mir rätselhaft.

Ich versuche nochmal etwas ausführlicher aufzuschreiben, was ich meine im Quellcode zu erkennen. Den hab ich mir übrigens über jad besorgt.

Im Konstruktor des Fensters passiert in etwa das:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
public Fenster(...)
{
	lwda = false;
	...
	leinwand = new Leinwand();
	leinwand.setzeLeinwandLauscher(this);
	...
	// -- leinwand zeichnen lassen, callback wenn fertig --
	...
	while (!lwda)
		info("warte");
	...
}

Das heißt, eine "Leinwand" wird erstellt. Die soll sich dann in das Fenster zeichnen. Wenn sie das getan hat, setzt sie selbst die Variable "lwda" auf true (über den "Lauscher").

Bis das passiert ist, "wartet" das Fenster in der while-Schleife.

Ich weiß nicht, wie die Threads im Detail aussehen, aber diese while-Schleife scheint den eigentlichen Callback zu blockieren. Auf jeden Fall kommt der Callback aus dem Thread, in dem AWT's "paint()"-Aufrufe stattfinden.

Jetzt kommt der Debug-Modus ins Spiel: Dieses "info()" im Konstruktor tut nur dann etwas, wenn der Debug-Modus aktiviert ist, nämlich "warte" auf die Konsole zu schreiben. Offenbar scheint das genügend Verwirbelungen 😉 zu erzeugen, sodass der Callback irgendwann doch mal durchkommt und die while-Schleife endlich verlassen werden kann.

Bis die Schleife verlassen ist, sieht man nur ein Fenster mit einem kleinen ausgefüllten Quadrat oben links – wie auf dem Screenshot, den er am Anfang gepostet hat. In dieser Zeit ist dann natürlich auch Last auf der CPU.

Wie sich das jetzt auf OpenJDK oder Sun Java auswirkt, kann ich wirklich nicht sagen. Ebenso wenig, wieso es mal hier und mal da funktioniert.

Der Fehler mit der fehlenden Bibliothek hat damit aber überhaupt nichts zu tun. Der entstand nur aus dem Workaround, den redknight ganz am Anfang vorgeschlagen hat: http://forum.ubuntuusers.de/post/2422246/

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

a) ohne Rednights .gnomerc bekam ich aber auch eine Fehlermeldung bzgl. fehlender Bibliothek, wenn auch einer anderen.

b) Schlägst Du vor sich mit Dekompiling die Klassen zu rekonstruieren, um dann zu versuchen, den Code zu patchen? Oder geht es nur ums verstehen?

c) Wenn Kontakt zum Lehrer besteht, vielleicht kann der den Quellcode selbst verfügbar machen, oder Kontakt aufbauen zu dem, der es könnte. http://www.salviati.de/Informatik/Informatik11/ Hier gibt es ja eine Kontaktseite, auch wenn man nicht weiß, ob der Kontakt der Autor der Software ist.

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

user unknown schrieb:

a) ohne Rednights .gnomerc bekam ich aber auch eine Fehlermeldung bzgl. fehlender Bibliothek, wenn auch einer anderen.

Oh, okay, sorry. Das war mir so nicht ganz klar. Trat bei mir nirgends auf.

b) Schlägst Du vor sich mit Dekompiling die Klassen zu rekonstruieren, um dann zu versuchen, den Code zu patchen? Oder geht es nur ums verstehen?

Geht nur ums Verstehen. Schon alleine, weil da Umlaute in den Methodennamen sind, die von jad nicht richtig aufgelöst werden ("hF6he" statt "höhe"), wäre mir persönlich das auch viel zu aufwändig.

c) Wenn Kontakt zum Lehrer besteht, vielleicht kann der den Quellcode selbst verfügbar machen, oder Kontakt aufbauen zu dem, der es könnte. http://www.salviati.de/Informatik/Informatik11/ Hier gibt es ja eine Kontaktseite, auch wenn man nicht weiß, ob der Kontakt der Autor der Software ist.

Das wäre wohl das beste. ☺

greenmoon

(Themenstarter)

Anmeldungsdatum:
10. März 2010

Beiträge: 269

Vain schrieb:

user unknown schrieb:

a) ohne Rednights .gnomerc bekam ich aber auch eine Fehlermeldung bzgl. fehlender Bibliothek, wenn auch einer anderen.

Oh, okay, sorry. Das war mir so nicht ganz klar. Trat bei mir nirgends auf.

Dito hier. Nur Fehlermeldung mit der gnomerc Datei

c) Wenn Kontakt zum Lehrer besteht, vielleicht kann der den Quellcode selbst verfügbar machen, oder Kontakt aufbauen zu dem, der es könnte. http://www.salviati.de/Informatik/Informatik11/ Hier gibt es ja eine Kontaktseite, auch wenn man nicht weiß, ob der Kontakt der Autor der Software ist.

Das wäre wohl das beste. ☺

Ich werde es versuchen. Normalerweise antwortet er relativ zügig auf emails, aber bisher hat er noch nicht reagiert. Aber spätestens Montag kann ich hier Rückmeldung geben, dann sehe ich ihn auf jeden Fall wieder im Unterricht. Ich hoffe aber, dass er früher schon auf die email reagiert.

€; Mein Lehrer hat mir die email Adresse des Entwicklers der Bibliothek gegeben und ich habe ihn freundlich um den Quellcode gebeten. Im Augenblick können wir wohl nur warten.

greenmoon

(Themenstarter)

Anmeldungsdatum:
10. März 2010

Beiträge: 269

Der Entwickler machte mich darauf aufmerksam, dass meine Version der Basis Bibliothek etwa 5 Jahre alt ist und mir eine neue, auf swing aufbauende, Version geschickt. Diese funktioniert auch soweit, bisher ist mir zumindest nichts gegenteiliges Aufgefallen, deswegen werde ich das hier als gelöst markieren.

Ich möchte mich für die Hilfe und die investierte Zeit bedanken. Sollten noch Probleme auftreten werde ich mich wieder melden.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

Das erklärt aber nicht, wieso es bei mir mit dem Sun-SDK geklappt hat. ☺

greenmoon

(Themenstarter)

Anmeldungsdatum:
10. März 2010

Beiträge: 269

Ein Fall für das Galileo Mystery Team? ☺ Für mich ist es erstmal wichtig, das es wieder klappt. Wenn jemand vorhat weitere Untersuchungen anzustellen bin ich gerne bereit, sofern es mir möglich ist, zu helfen, aber für mich ist das erstmal sekundär.

Antworten |