2016-08-10 13 views
0

javaコードでpostgreSql.exeをインストールしようとしています。私はworkspace/project-root-folder/dataの下にインストーラexeファイルを保管しています。これによりjavaコードでコマンドを実行中にエラーが発生しました

System.out.println("Lets install postgreSql"); 
ProcessBuilder b = new ProcessBuilder(); 
b.directory(new File("data").getAbsoluteFile()); 
b.command(installationCommand); 
b.start(); 

は私が例外の下に取得しています設定:以下

installationCommand = "postgresql-9.5.3-1-windows-x64.exe --mode unattended --installer-language en --serverport 5433 --superaccount test_admin --superpassword ‘password’" 

は私のJavaコードで使用していたコードスニペットです:私は私のJavaコードを介してコマンドの下に実行しようとしています

java.io.IOException: Cannot run program "postgresql-9.5.3-1-windows-x64.exe --mode unattended --installer-language en --serverport 5433 --superaccount protoel_admin --superpassword ‘password’" (in directory "C:\DurgeshProjectWork\Workspace\protoel-core\data"): CreateProcess error=2, The system cannot find the file specified 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) 
    at frontend.guifx.pginstallation.PgStandaloneInstaller.installPg(PgStandaloneInstaller.java:27) 
    at frontend.guifx.controller.ProtoelController.initialize(ProtoelController.java:386) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2552) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2445) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3218) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3179) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3152) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3128) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3108) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3101) 
    at frontend.guifx.main.ProToelApplication.start(ProToelApplication.java:34) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$159(LauncherImpl.java:863) 
    at com.sun.javafx.application.LauncherImpl$$Lambda$53/953109155.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$172(PlatformImpl.java:326) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$45/2034688500.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$170(PlatformImpl.java:295) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$48/3243045.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$171(PlatformImpl.java:294) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$47/1007251739.run(Unknown Source) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$145(WinApplication.java:101) 
    at com.sun.glass.ui.win.WinApplication$$Lambda$36/1508395126.run(Unknown Source) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified 
    at java.lang.ProcessImpl.create(Native Method) 
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:386) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:137) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) 
    ... 25 more 

誰が私は、Javaコードを介して特定のディレクトリからコマンドを実行する方法を教えてくださいでした。親切に助けてください。事前に感謝します

答えて

1

.directory()メソッドで間違ったディレクトリを指定しているようです。あなたはそれを二重にチェックしなければなりません。このメソッドに渡された値がpostgresqlインストーラディレクトリを指していることを確認してください。

+0

ディレクトリ機能の値が期待どおりになっています。それは私のデータフォルダまでのディレクトリを示しています。しかし、まだ上記の例外を投げる –

0

このコマンドを使用するには、すべての引数を文字列の配列に分割する必要があります。 ProcessBuilder.command(String... args)のドキュメントを参照してください。 installationCommand.split(" ")を使用してString[]を取得することができます。

また、ディレクトリパスが正しいかどうかを確認してください。

関連する問題