【问题标题】:Runtime.getRuntime().exec("java -jar xxx.jar); Not Working | Mac OS X [duplicate]Runtime.getRuntime().exec("java -jar xxx.jar); 不工作 | Mac OS X [重复]
【发布时间】:2016-03-22 06:26:07
【问题描述】:

我的问题是,我无法在 Java 程序中打开 jar。我要打开的 .jar 中有一个 OpenCV 库。如果我双击.jar,那么它工作正常。如果我在 Mac OS X 终端中键入它也可以正常工作。

@Override
public void actionPerformed(ActionEvent e) {
    if(e.getSource() instanceof JButton){
        JButton button = (JButton) e.getSource();
        if(button.getText().equals("Aktivieren")){

            System.out.println("Yaay");
                String str;

                if(Main.os.contains("Mac")){
                    str = "java -jar "+System.getProperty("user.home") + "/Library/Application\\ Support/MW"+"/System/Core.jar";
                    System.out.println(str);
                } else {
                    str = "java -jar "+Main.directory+"/MW/System/Core.jar";
                }

                System.out.println(str);

                try {
                    Runtime.getRuntime().exec(str);
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }

        }
    }
}

所以 Sysout 的输出是: java -jar /Users/Tech/Library/Application\ Support/MW/System/Core.jar

当我将它手动粘贴到终端时,它工作得很好。

而且我没有收到任何错误消息。

对不起,我的英语不好,我是德国人。

感谢(或其他)技术

【问题讨论】:

  • 如果您的项目需要它并使用像Eclipse这样的IDE,您需要添加a jar to the buildpath。有很多关于这方面的资源,我不想发布一个新的以避免重复。
  • 我认为这可能是因为类路径问题。
  • 这会失败,因为您不能将Runtime.exec(String) 与任何包含空格或反斜杠的参数一起使用。请改用Runtime.exec(String[]),例如.exec(new String[] { "java", "-jar", System.getProperty("user.home") + "/Library/Application Support/MW/System/Core.jar") })(注意没有反斜杠)
  • 它的工作!谢谢大家

标签: java macos opencv runtime


【解决方案1】:

你可以试试这个吗?

if(Main.os.contains("Mac")){
    String jar = "System.getProperty("user.home") + "/Library/Application\\ Support/MW"+"/System/Core.jar";
    str = "java -classpath " + jar + " -jar "+System.getProperty("user.home") + "/Library/Application\\ Support/MW"+"/System/Core.jar";
    System.out.println(str);
} else {
    String jar = "Main.directory+"/MW/System/Core.jar";
    str = "java  -classpath " + jar + " -jar "+Main.directory+"/MW/System/Core.jar";
}

总的来说,我很想使用ProcessBuilder,但这不会解决你的问题:)

【讨论】:

  • 它没有解决问题;(它也没有打开。
  • 是的,它不会工作。您必须创建 shell 并在 shell 中执行 java 程序。
猜你喜欢
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
相关资源
最近更新 更多