2017-07-09 1 views
0

Ich habe viele Recherchen für die Ausführung eines externen Programms (z. B. iTunes) durch einen einfachen Code durchgeführt, aber die Vorschläge haben nie funktioniert. Manchmal passiert nichts, manchmal habe ich diese Fehlermeldung: English: Unable to find "Discord". Be sure the name is written correctly and try again.Ausführen eines externen Programms von Java (mit cmd, Windows)

My-Code ist folgende:

try { 
    String name = (String) "start " + table.getValueAt(table.getSelectedRow(), table.getSelectedColumn()); 
    ProcessBuilder p = new ProcessBuilder("cmd.exe", "cd /D %HOMEDRIVE%%HOMEPATH%/Desktop", "/c", name); 
    p.start(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

In meinem Beispiel habe ich den Namen des externen Programms von einem JTable, ist dieser Teil funktioniert gut . Die ProcessBuilder ändert zuerst das Verzeichnis auf den Desktop. Dann sollte das externe Programm durch den Befehl start <program name> ausgeführt werden. Mit diesem Code bekomme ich die erwähnte Fehlermeldung.

Wenn Sie eine Lösung mit cmd haben, schließen Sie bitte das Verzeichnis auf den Desktop ein.

+2

Siehe ['ProcessBuilder # -Verzeichnis (Datei)'] (https://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.html#directory-java.io.File-) für eine bessere Möglichkeit, das Arbeitsverzeichnis zu setzen – MadProgrammer

Antwort

1

Sie sollten jedes Argument als einzelnen Eintrag an ProcessBuilder übergeben. In Ihrem aktuellen Code nehmen Sie manchmal mehrere Argumente zusammen (wie cd /D %HOME...). Versuchen Sie, jedes Argument, wie es eigene Parameter, einschließlich des Befehls vorbei zu beginnen und ihr Argument:

String name = (String) table.getValueAt(table.getSelectedRow(), table.getSelectedColumn()); 
ProcessBuilder p = new ProcessBuilder("cmd.exe", "cd", "/D", "%HOMEDRIVE%%HOMEPATH%/Desktop", "/c", "start", name); 
+0

Leider funktioniert es nicht, die gleiche Fehlermeldung tritt auf. –

0

Nach: cmd.exe,

/D Ignorieren Registry AutoRun-Befehle HKLM | HKCU \ Software \ Microsoft \ Command Processor \ AutoRun

Sie start.exe /D Meinten nicht cmd.exe /D?

und auch gesagt, dass sie, dass

If/oder C/K angegeben ist, dann der Rest der Befehlszeile als unmittelbaren Befehl in der neuen Schale verarbeitet wird. Mehrere Befehle, die durch das Befehlstrennzeichen '&' oder '& &' getrennt sind, werden akzeptiert, wenn sie in Anführungszeichen gesetzt sind.

Meinten Sie cmd.exe /C "cd %HOMEDRIVE%%HOMEPATH%\Desktop & Discord"?

+0

Beide Lösungen funktionieren nicht, nichts passiert. –

Verwandte Themen