Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java从哪里结束,windows从哪里开始?文件分隔问题_Java_Windows_Unix_Path - Fatal编程技术网

Java从哪里结束,windows从哪里开始?文件分隔问题

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

我想在运行时启动JavaJAR,但Windows又出现了问题。 我知道这肯定出现了数百次,但我尝试了一些方法,如String.replace/,\由于我无法在Windows上调试,这需要一些时间。 这在Unix下运行良好:

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