Java从哪里结束,windows从哪里开始?文件分隔问题
我想在运行时启动JavaJAR,但Windows又出现了问题。 我知道这肯定出现了数百次,但我尝试了一些方法,如String.replace/,\由于我无法在Windows上调试,这需要一些时间。 这在Unix下运行良好:Java从哪里结束,windows从哪里开始?文件分隔问题,java,windows,unix,path,Java,Windows,Unix,Path,我想在运行时启动JavaJAR,但Windows又出现了问题。 我知道这肯定出现了数百次,但我尝试了一些方法,如String.replace/,\由于我无法在Windows上调试,这需要一些时间。 这在Unix下运行良好: public boolean run(String args[], String workingDir, boolean output) throws FileNotFoundException { if (args.length
public boolean run(String args[], String workingDir, boolean output) throws
FileNotFoundException {
if (args.length <= 0) {
System.err.println("No cmd provided");
}
if (workingDir == null) {
workingDir = "./";
}
ProcessBuilder pb = new ProcessBuilder(args);
pb.directory(new File(workingDir));
Process p;
int exitValue = 0;
try {
p = pb.start();
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
p.waitFor();
if (output) {
while ((line = br.readLine()) != null) {
setChanged();
notifyObservers(line);
}
}
exitValue = p.exitValue();
} catch (InterruptedException ex) {
return false;
} catch (IOException ex) {
return false;
}
if (exitValue == 0) {
return true;
} else {
throw new FileNotFoundException();
}
}
在java中执行特定于平台的操作时,请使用标准java系统属性,以确保应用程序是可移植的。有关应用程序可用的某些值的更多信息,请参阅。在执行代码安装后,我发现了两个错误: 1.我的OS方法使用了String.replaceAll/,\并抛出了StringIndexOutOfBoundsException不知道为什么,但String.replac工作正常 2.我觉得虚拟机会忽略不受支持的参数,比如-Xdock:name和-Xdock:icon,但事实并非如此,所以我为Mac制作了一个单独的exec字符串。
谢谢你的提示和帮助 您的问题是什么?可能java命令不在该windows计算机上的%PATH%中?至少在这些异常中记录信息,它们可能会准确地告诉您如果有什么东西抛出了会出现什么问题。我得到了一个FileNotFoundExceptionRight,所以它可能找不到java可执行文件,你需要找出它在哪里,并提供它的完整路径。那么为什么我首先要启动App1.jar呢?请注意那里的file.separator。我熟悉file.separator,但如果我到处替换它,这会使代码不可读。如果是windows系统,我正在检查操作系统,然后将/替换为\\。但是App1.jar就是找不到App2.jar。Windows不知道像。\\App2.jar这样的路径吗?我通常只在方法的顶部获取一次文件分隔符,或者在类的顶部获取一个静态final,并使用一个变量代替调用来获取系统属性值。但是Java在其api中使用Usix样式的路径,只要我不从运行时执行某些操作?
public static void launchApp(String subPath) throws FileNotFoundException {
String[] args = String.format("java -jar -Xdock:name=AppName -Xdock:icon=%sicon.icns %AppName.jar", subPath, subPath).split(" ");
ExecRuntime.run(args, null);
}