我想从我的Java应用程序中运行一个外部可执行文件。它位于该应用程序的一个包中,但是该应用程序的路径可能会有所不同,并且可能包含空格。我已经尝试过:
String broker = MqttServerInterface.class.getResource("broker/mosquitto.exe").getPath();
System.out.println(broker);
ProcessBuilder pb = new ProcessBuilder(broker,"-p",port);
server = pb.start();
这段代码在路径没有空格的情况下可以正常运行。但是当路径中包含空格时,它会报CreateProcess error=267错误,即目录名称无效。
我已根据这里的建议进行了代码重写:ProcessBuilder无法在路径中带有空格的情况下运行bat文件:
String brokerDir = MqttServerInterface.class.getResource("broker").getPath();
System.out.println(brokerDir);
ProcessBuilder pb = new ProcessBuilder("mosquitto.exe","-p",port);
pb.directory(new File(brokerDir));
pb.redirectError();
server = pb.start();
但是现在,当路径中有空格时,我仍然会遇到错误267,而没有空格时则会出现错误2(系统找不到指定的文件)。从Java运行可执行文件的正确方法是什么?
PATH
环境变量中获取它吗? - fgeSystem.out.println(broker);
实际上会显示什么吗? - Lolo/N:/dropbox/Dropbox/projects/robot%202.0/prophio%203/prophio3/build/classes/com/trobot/prophio3/broker/mosquitto.exe
- mactro