meine Aufgabe ist es innerhalb einer java Anwendung ein anderes Java Programm zu starten. Ich habe es leider nur als executable jar (und das muss leider auch so bleiben).
Der einfache Teil ist: Button wird gedrückt, jar soll starten. In Netbeans geht das auch.
Mache ich aus meiner Anwendung nur ein executable jar, geht es nicht mehr. “URI is not hierarchical”
Der Code:```
URL u = Myclass.class.getResource(“Myjar.jar”);
String help = “”;
try {
File f = new File(u.toURI());
if (f.exists()){
help = f.toString(); //System.out.println(“da”);
} else {
System.out.println(“warning”);
}
} catch (URISyntaxException ex) {
Logger.getLogger(Myclass.class.getName()).log(Level.SEVERE, null, ex);
}
try {
Process p = Runtime.getRuntime().exec(new String[]{"java","-jar",help});
System.out.println("Ausführung");
} catch (IOException ex) {
Logger.getLogger(Myclass.class.getName()).log(Level.SEVERE, null, ex);
}
Ich verstehe, dass ein jar keine Uri ergibt. Was ich nun nicht verstehe ist, wie ich mittels eines relativen Pfades auf das jar komme und es ausführen kann. Was für ein Objekt soll ich daraus machen?
Ich brauche auch keine Rückgabewerte, da das jar eigenständig läuft und mit meinem Tool nix zu tun hat, leider muss es drin bleiben.
Freue mich über jede Hilfe.
Danke!
Ich habe das Projekt und natürlich verschiedene Unterpackages, also eines für Files, da liegen ein paar Bilder drin, klappt super. Und halt die jar. Das klappt nicht.
Ausführung aus Eclipse mit der Lösung von AmunRa klappt, auch start über konsole am gleichen Rechner klappt, leider aber nicht, wenn ich den Rechner wechsle…
Was bedeutet, das jar auszupacken (es ist doch executable)?
du hast Programm A und dieses soll Programm B ausfuehren…
Wenn Programm A als Jar vor liegt und Programm B in dem jar archiv von Programm A liegt kann das nicht gehen.
das JAr von Prog A und das jar von Prog B sollten am einfachsten im selben Ordner nebeneinander liegen, dann kannst du das ganze leicht ausfuehren.
Was eben nicht geht ist wenn das eine Jar im anderen steckt
In dem Fall ist gemeint, das dein jar in einem jar ist und deswegen nicht aufgerufen werden kann. In deinem Netbeans ist deine jar noch im src Ordner und dadurch nicht gepackt und kann nun ausgeführt werden.
Bei Ressourcen, wie Bildern macht das nix, das sie mit in die selbe jar gepackt sind, aber um die jar mittels Runtime.getRuntime().exec() auszuführen, muss es an einem für die CMD zugängliche stelle sein.
Warum klappt es dann, wenn ich Programm als Jar über die Konsole starte und dann den Button drücke und Programm B ausgeführt wird? Wie gesagt am gleichen Rechner hat das geklappt.
Jetzt verstehe ich nicht was du meinst. In deinem ersten Post, meinst du es geht nicht, jetzt meinst du es geht doch, wo ist denn dann dein Problem?
Auch wenn es mich wundert, dass es jetzt geht, oder hast du es jetzt auch noch ungepackt in passender Ordnerstruktur liegen?
Zu Beginn (vor meinem ersten Post) ging es aus Netbeans, sonst nicht.
Nachdem ich mit dem Ansatz von AmunRa gearbeitet habe, ging es weiterhin aus Netbeans. Dann habe ich ein exec-jar daraus gemacht und es über die Konsole gestartet (java -jar meinProjekt.jar) dann hat es auch auf dem gleichen Rechner geklappt.
Habe ich es auf einem anderen Rechner probiert, ging es wieder nicht.
Deshalb habe ich gefragt, warum ein jar nicht aus einem jar ausgeführt werden kann.
Ich hoffe das war verständlich.
Das wäre dann ja was ich auch schon vermutet hatte
Also es wäre Gut, wenn du uns das mal mitteilen könntest, damit wir dein Problem nachvollziehen können.
PS. wenn du die Jar A und Jar B auf den anderen Rechner kopierst, müsste es auch auf dem anderen Rechner laufen.
*** Edit ***
[QUOTE=Unregistered;86423]…
Deshalb habe ich gefragt, warum ein jar nicht aus einem jar ausgeführt werden kann.
Ich hoffe das war verständlich.[/QUOTE]
Weil wie schon geschrieben, wenn es in die Jar gepackt ist, die CMD nicht an die Datei kommt, siehe folgenden Post
[QUOTE=TheUnregistered;86415]In dem Fall ist gemeint, das dein jar in einem jar ist und deswegen nicht aufgerufen werden kann. …
Bei Ressourcen, wie Bildern macht das nix, das sie mit in die selbe jar gepackt sind, aber um die jar mittels Runtime.getRuntime().exec() auszuführen, muss es an einem für die CMD zugängliche stelle sein.
*** Edit ***
mhh zu langsam[/QUOTE]
Da Runtime.getRuntime().exec() quasi eine Konsole öffnet, die es aufruft, was aber halt nicht geht
Also ungepackt hatte ich es nicht liegen. Ich habe nun noch ein wenig rumprobiert und verstanden, was ihr meint.
Es geht jetzt.
Danke für die Hilfe, wen es interessiert, genauso so, wie gesagt. Beide jars nebeneinander und den Pfad zur Ausführung entsprechend anpassen. Dann geht es.