.jnlp mit JOGL startet nicht korrekt

jemandzehage

Aktives Mitglied
Hallo,

ich habe eine Anwendung die mit den Klassen der JOGL-Bindings arbeitet. Jetzt möchte ich dieses Programm in eine veröffentlichbare Form bringen mit einer webstart datei. Das Programm startet auch wie gewünscht, und das Fenster öffnet sich, aber es bleibt dann leer. Andere Anwendungen, die mit JOGL programmiert wurden, funktionieren aber. Das JOGL habe ich einmal per <extension> und einmal direkt eingebunden. Aber es passiert beidesmal das gleiche. Woran könnte das denn liegen. Wo muss ich denn Anfangen zu suchen? Ist das eher im source-code des Programms oder im .jnlp-file.

Danke im vorraus.
 
Hm. Hab zwar mit JNLP noch nicht viel gemacht, aber ... du solltest mal schauen, ob du irgendwo die Java Konsole aufkriegst (rechtsklick auf das kleine Kaffeetassensymbol unten rechts, oder in der Systemsteuerung einschalten). Mir deucht, dort könnte ein Exceptionchen geflogen sein...
 
Moin,
also ich hab mal ein bisschen mit der Console gebastelt und dann ist es mitlerweile kein .jnlp-Problem mehr. Ich hoffe es kann mir trotzdem jemand helfen.
Es wird eine Bild-Datei in dem Programm geladen, die dann in ein Texture geladen wird. Das mache ich per
Java:
URL url = this.getClass().getClassLoader().getResource(fnm);
. Das Bild befindet sich im .jar-File. Wenn ich mir allerdings die URL anschaue, dann befindet sich ein Ausrufezeichnen nach dem .jar-File. Also so sieht das aus: file:\C:\Users\User\jnlp\myJar.jar!\image.png. Ich habe keine Ahnung wo das herkommt. Liegt das daran, dass es ein Texture ist? Weil in anderen Anwendungen könnte ich Bilder auf diese Art und Weise laden.
 
???
Was ist fnm?
Funktioniert dein Programm als normale Applikation? Oder kannst du das Prog. fehlerfrei aus der IDE starten?
 
Moin,

die url wird schon korrekt sein, sonnst hätte der ClassLoader null zurückgegeben. Das mit dem "!" ist auch die übliche URL Notation für eine "in JAR" Adressierung. Der erste Teil zeigt wo das JAR zu finden ist und der zweite Teil welche Ressource gemeint ist.

Allerdings, dass die url so gültig ist, heißt noch lange nicht, dass sie so auch sinnvoll ist. Nicht alles wo URL dransteht kann/darf auch mit allem umgehen, das irgendwoher kommt wo URL draufsteht.

Allgemein willst Du eine Ressource laden, die sich innerhalb des ClassPath befindet. Der naheliegenste Weg ist dann einfach sich den Datenstrom der Ressource auch direkt vom ClassLoder zu holen. Und diesen dann an die zu verarbeitende Methode weiterzureichen.

Bei Dir, vermutlich, konkret:

Java:
final InputStream inputStream = getClass().getClassLoader().getResourceAsStream("image.png");
final Texture texture = TextureIO.newTexture(inputStream, true, TextureIO.PNG);

Bzw., wenn Du per Hand über ImageIO gehst: Texture.java

Gruß,
Fancy
 
Mh, also das mit dem Stream funktioniert leider nicht. Ich habe das Texture probiert per String zu laden (also TextureIO.newTexture(file, mipmapped) ) und das Funktioniert auch nicht. Das Programm funktioniert wenn ich das in der Umgebung von Eclipse laufen lasse.

In anderen Programmen hat das aber funktioniert mit:
Java:
URL url = this.getClass().getClassLoader().getResource(String);
Woran liegt das, das es nicht funktierniert? Liegt es daran, das es von einem .jnlp file gestartet wird, oder das es eine JOGL umgebung ist?
 
Bei dem String muss man noch aufpassen, dass man das richtige Verzeichnis erwischt... Ich vermute, der InputStream ist "null"...?
 
^^ jo, das wars. jetzt funktionierts...

mich würde trotzdem interessieren, woran das liegt, dass es nicht wie gewohnt funktioniert. Und an welcher umgebung das liegt. An jogl oder jnlp. Weiß das jemand??
 
Da der InputStream auch null wäre, wenn danach NICHT die JOGL-Funktionen zum Auslesen verwendet werden würde, bleiben da nicht so viele Möglichkeiten 😉
 

Zurück
Oben