2017-07-09 8 views
0

いくつかの簡単なコードで外部プログラム(iTunesなど)を実行するための多くの調査を行ってきましたが、提案はうまくいかなかった。私の例ではJavaから外部プログラムを実行する(cmd、Windowsを使用)

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(); 
} 

私はJTableから外部プログラムの名前を取得し、この部分は正常に動作している: English: Unable to find "Discord". Be sure the name is written correctly and try again.

マイコードは以下の通りです:たまに何も時々私は、このエラーメッセージが表示されました、起こっていません。 ProcessBuilderは、最初にディレクトリをデスクトップに変更しています。外部プログラムはstart <program name>コマンドで実行する必要があります。このコードでは、上記のエラーメッセージが表示されます。

解決策がある場合は、ディレクトリをデスクトップに変更してください。

+2

['ProcessBuilder#directory(File)'](https://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.html#directory-java.io.File-)を参照してください。作業ディレクトリを設定するためのより良い方法 – MadProgrammer

答えて

1

各引数をProcessBuilderの単一のエントリとして渡す必要があります。現在のコードでは、複数の引数を組み合わせることがあります(cd /D %HOME...など)。それが起動し、その引数にするコマンドを含む、独自のパラメータだとして、すべての引数を渡す試してみてください。

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

悲しいことに、それは動作しません、同じエラーメッセージが発生します。 –

0

によると:cmd.exe

/レジストリ自動実行が HKLMコマンド無視D |ます。HKCU \ Software \ Microsoft \コマンドプロセッサの\ AutoRun機能

あなたがstart.exe /Dないcmd.exe /Dを意味しましたか?

、またそれらが/ Cまたは/ Kが指定されている場合、コマンドラインの残りの部分は、新しいシェルで即時コマンドとして処理され

と言わ。コマンドセパレータ '&'または '& &'で区切られた複数のコマンドは、引用符で囲まれていると受け入れられます。

cmd.exe /C "cd %HOMEDRIVE%%HOMEPATH%\Desktop & Discord"を意味しましたか?

+0

両方のソリューションが機能していない、何も起こりません。 –

関連する問題