2017-06-26 3 views
1

Ich habe eine einfache SWING-GUI für ein CMD-Programm erstellt jemand anderen entwickelt. Um dieses Programm ausführen ich ausführen diese Zeile:Ausführen eines externen Programms von einer ausführbaren Jar

Process convertProcess = Runtime.getRuntime().exec("jlyt\\prog\\com_win\\jlyt.bat " + selectedFiles.getName()); 

Der jlyt Ordner befindet sich im selben Ordner wie meine src Ordner (ich benutze IntelliJ). Wenn über IDE läuft, funktioniert alles gut, aber nicht, wenn ich das Glas, das ich erstellt habe, ausführen. Ich habe versucht, es aus dem Verzeichnis auszuführen, in dem es von IntelliJ gespeichert wurde, sowie aus dem Verzeichnis des Ordners jlyt. Ich habe das externe Programm (im Ordner jlyt) nicht zu meinem Glas hinzugefügt, da es sehr schwer ist. Ich möchte, dass mein Glas neben dem ursprünglichen Programm verteilt wird und nicht alles enthält.

Irgendeine Idee, wie ich mein Glas bauen sollte?

Danke.

Antwort

0

Ich sehe, warum Sie/jlyt in/src setzen, dient es als ein Komfort innerhalb der IDE./jlyt wird als Ressource in/bin/classes oder was auch immer das IDE-Ziel ist kopiert, und alles funktioniert von der IDE aus.

Wenn Sie Ihre Anwendung mit JAR verbinden, wird normalerweise/Jlyt zum JAR hinzugefügt. Es ist jedoch nicht für Windows zugänglich. Ich nehme an, Sie legen eine Kopie von/jlyt in den gleichen Ordner wie die JAR, wenn Sie versuchen, zu starten.

Als ersten Schritt, in einem Terminal, setzen Sie das aktuelle Verzeichnis auf den Ordner mit dem JAR und/jlyt. Da Sie in Ihrem exec() einen relativen Pfad angeben, sollte dies ausreichen, damit alles ausgeführt werden kann.

Sie können auch versuchen, eine Verknüpfung zum JAR zu erstellen, da es ausführbar ist, und das Arbeitsverzeichnis auf den Ordner mit der JAR setzen.

+0

ich habe nicht/Jlyt speziell unter/src gesetzt, weil ich es nicht zum Glas hinzufügen wollte. der Ordner/jlyt befindet sich auf der gleichen Ebene wie/src und ich wollte den relativen Pfad dazu aus dem Jar verwenden. Ich ausgeschlossen/Jlyt, als ich das Glas – exigez

+0

OK erstellt habe. Dann sollte der Rest von dem, was ich gesagt habe, gelten. Der Hauptpunkt ist das Einstellen des aktuellen Verzeichnisses. – Steve11235

0

Sie müssen einen relativen Pfad basierend auf der Stelle verwenden, wo jlyt.bat Ihrer JAR-Datei entspricht.

z.B. Verwenden Sie "./" oder "../", um durch den Verzeichnisbaum zu navigieren.

0

Der Speicherort der JAR-Datei ist nur für das Starten der JAR relevant. Das Arbeitsverzeichnis muss das Verzeichnis sein, das den Ordner jlyt enthält, da Sie "jlyt \ ..." als Pfad zur ausführbaren Datei verwenden.

Beispiel, können folgende Verzeichnisstruktur annehmen:

somewhere 
    project 
     gui 
      appl.jar 
     jlyt 
      prog 
       ... 

Verzeichnis arbeiten müssen 'Projekt' und die JAR wird dann als ‚gui \ appl.jar

C:\somewhere> cd project 
C:\somewhere\project> java -jar gui\appl.jar 
referenziert werden

Achten Sie auch darauf, dass der Konvertierungsprozess beendet wird (zB convertProcess.waitFor()), bevor Sie Ihre Anwendung/Java beenden - ich glaube, dass jeder externe Prozess läuft beendet, wenn die Java Virtual Machine geschlossen ist!

Hint in Dokumentation des Prozesses:

Ab 1,5, ProcessBuilder.start() ist der bevorzugte Weg, um einen Prozess zu schaffen.

+0

Wenn ich Ihrem Beispiel folge, dann ist appl.jar tatsächlich auf der gleichen Ebene wie das jlyt-Verzeichnis, was bedeutet, dass beide unter Projekt sind. Das hat immer noch nicht funktioniert. Vielleicht muss ich den relativen Pfad zu Jlyt, Fledermaus bearbeiten? aber was fehlt? – exigez

+0

@exigez in meinem Beispiel, appl.jar befindet sich unter "project * \ gui *", also unter "gui" unter "project" ... beachte den Einzug, beachte auch die cmd 'java -jar gui \ appl.jar' es muss eindeutig unter gui sein –

Verwandte Themen