Ein Problem, das auftritt, wenn Sie dieses Programm über eine Java-GUI ausführen, ist, dass es im Hintergrund läuft. Sie können die Eingabeaufforderung also überhaupt nicht sehen.
Um dies zu umgehen, müssen Sie die java.exe über "cmd.exe" UND "start" ausführen. Ich weiß nicht warum, aber wenn Sie "cmd /c start" eingeben, wird die Eingabeaufforderung angezeigt, während sie ausgeführt wird.
Das Problem mit "start" ist jedoch, dass wenn der Pfad zur Anwendung ein Leerzeichen enthält (der Pfad zur Java-Exe hat normalerweise ein Leerzeichen, da er in C:\Program Archivos \Java\jre6\bin\java.exe oder ähnlich), dann scheitert der Start einfach mit "cannot find c: \Program "
Sie müssen also Anführungszeichen um Folgendes setzen C:\Program Archivos \Java\jre6\bin\java.exe Jetzt beschwert sich der Start über Parameter, die Sie an java.exe übergeben: "Das System kann die Datei -cp nicht finden."
Das Leerzeichen in "Program Files" durch einen Backslash zu ersetzen, funktioniert ebenfalls nicht. Die Idee ist also, kein Leerzeichen zu verwenden. Erzeugen Sie eine temporäre Datei mit der Erweiterung "bat" und fügen Sie dann Ihren Befehl mit Leerzeichen darin ein und führen Sie die bat aus. Wenn Sie eine Bat-Datei über Start ausführen, wird sie jedoch nicht beendet, Sie müssen also "exit" an das Ende der Batch-Datei setzen.
Das scheint immer noch eklig zu sein.
Auf der Suche nach Alternativen habe ich herausgefunden, dass die Verwendung von Anführungszeichen in der Leerstelle von "Program Files" tatsächlich mit Start funktioniert.
Ändern Sie in der obigen EXECUTE-Klasse den String builder appends to:
append( "cmd /C start \"Some title\" " ).
append( java.lang.System.getProperty( "java.home" ).replaceAll(" ", "\" \"") ).
append( java.io.File.separator ).
append( "bin" ).
append( java.io.File.separator ).
append( "java" ).
append( " " ).
append( new java.io.File( "." ).getAbsolutePath() ).
append( java.io.File.separator ).
append( CLASS_TO_BE_EXECUTED ).
1 Stimmen
Also, wenn ich Sie richtig verstehe, haben Sie mehrere Klassen mit main()-Methoden und Sie wollen sie in separaten Prozessen zu starten?
0 Stimmen
Wie wäre es, wenn Sie exec("java.exe", CLASS_TO_BE_EXECUTED.class.getName()) ?
0 Stimmen
Wie man Eingaben von einem Benutzer für eine Java-Klasse, die als Prozess läuft, der selbst von einem Java-Programm gestartet wird, mit etwas wie br.readLine() entgegennimmt
1 Stimmen
Ich stimme dem OP zu, es wäre schön, wenn wir die gesamte CLI-Schnittstelle umgehen könnten. Jemand sollte wirklich mit einer Wrapper-Klasse kommen, um das zu tun, so dass Anwendungsentwickler auf Geschäftslogik konzentrieren können.