【问题标题】:Executing jar file in java在java中执行jar文件
【发布时间】:2016-06-01 07:05:45
【问题描述】:

我正在 java 中执行一个 jar 文件。到目前为止,我的代码运行良好。

我通过 java 执行 epubcheck,因为它是一个控制台应用程序

这里是epubcheck的地址

https://github.com/IDPF/epubcheck

除非我需要浏览的文件名包含 ' 符号 和文件夹名称上的空格或文件名上的空格。

这是文件夹名称的错误

Unrecognized argument: 'Files\1.epub'

这是文件名包含'时的错误

Unrecognized argument: 'the'

这是我的代码

String a = System.getProperty("user.dir") + "\\epubcheck-4.0.1\\" + "epubcheck.jar";
    Process p = Runtime.getRuntime().exec("java -jar" + " " + a + " " + selectedFile.getAbsolutePath());

这里是如何运行 epubchecker

java -jar epubcheck.jar file.epub

但是当我在命令提示符下手动运行它并没有给我一个错误

【问题讨论】:

    标签: java jar


    【解决方案1】:

    您应该引用构成命令行的标记。使用.exec(String[]) 版本

    Runtime.getRuntime().exec(new String[]{"java"
         , "-jar"
         , a
         , selectedFile.getAbsolutePath()});
    

    【讨论】:

      【解决方案2】:

      在命令字符串中添加引号不起作用。

      exec(String, ...) 的 javadoc 是这样说的:

      更准确地说,命令字符串使用由调用new StringTokenizer(command) 创建的StringTokenizer 分解为标记,而无需进一步修改字符类别。标记器生成的标记然后以相同的顺序放置在新的字符串数组cmdarray中。

      如果您随后查看 StringTokenizer 的 javadoc,它会说:

      StringTokenizer 方法不区分标识符、数字和带引号的字符串,也不识别和跳过 cmets。

      tokenizer [由new StringTokeniser(string) 制作] 使用默认分隔符集,即“\t\n\r\f”。

      换句话说,exec 会将命令字符串拆分为参数,忽略任何引用。

      任何引号(或双反斜杠转义)都将被视为普通字符。例如:

          exec("java -jar \"C:/Users/My User Name/foo.jar\"");
      

      将尝试查找名为"C:/Users/My 的JAR 文件。是的......路径名的开头有一个前导引号。

      您可以通过自己进行论证来避免这个问题;例如

          exec(new String[]{"java",
                            "-jar",
                            "C:/Users/My User Name/foo.jar"});
      

      请注意没有添加引号。


      如果(出于某种原因)您的应用程序提供了已引用的路径名,也可以使用 shell 来处理引用。例如(Linux / Unix / Mac OSX)

          exec(new String[]{"bash", 
                            "-c",
                            "java -jar \"/home/me/silly dir/foo.jar\""});
      

      【讨论】:

        猜你喜欢
        • 2012-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-18
        • 2014-12-31
        • 2011-06-23
        • 2014-05-09
        相关资源
        最近更新 更多