【问题标题】:Where does Java end and windows start? File seperator QuestionJava在哪里结束,Windows从哪里开始?文件分隔符问题
【发布时间】:2011-09-19 19:14:02
【问题描述】:

我想通过 Runtime 启动 Java jar,但 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();
                }
            }

发布者:

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

【问题讨论】:

  • 你的问题/问题是什么?
  • 也许 java 命令不在该 Windows 机器上的 %PATH% 中?并且至少在这些异常中记录信息,如果发生异常,它们可能会准确地告诉你出了什么问题。
  • 我得到一个 FileNotFoundException
  • 对,所以它可能找不到java可执行文件,你需要弄清楚它在哪里并提供它的完整路径。
  • 那我为什么要先启动App1.jar呢?

标签: java windows unix path


【解决方案1】:

在 Java 中执行特定于平台的操作时,请使用标准的 Java 系统属性,以确保您的应用程序是可移植的。请参阅System Properties,了解有关您的应用可用的一些值的更多信息。

【讨论】:

  • 在那里注意file.separator
  • 我对 file.separator 很熟悉,但是如果我在任何地方替换它,这会使代码不可读。我正在检查操作系统,然后将 / 替换为 \\ 如果它是 Windows 系统。但是 App1.jar 就是找不到 App2.jar。 Windows 不知道 .\\App2.jar 之类的路径吗?
  • 我通常只在方法顶部获取文件分隔符一次,或者作为类顶部的静态final,并使用变量代替调用来获取系统属性值。
  • 但是只要我不从运行时执行某些东西,Java 在其 api 中使用 Usix 样式路径?
【解决方案2】:

获取代码后,我发现了2个错误: 1. 我的操作系统方法使用 String.replaceAll("/","\") 并抛出 StringIndexOutOfBoundsException (不知道为什么)但 String.replace() 工作正常 2. 我天真地认为 VM 会忽略不支持的参数,如 -Xdock:name 和 -Xdock:icon 但它不会,所以我为 Mac 制作了一个单独的 exec 字符串。 感谢您的提示和帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多