【问题标题】:Java not executing commands in LinuxJava 在 Linux 中不执行命令
【发布时间】:2017-08-16 16:31:10
【问题描述】:

我正在为 CLI 程序制作 GUI,当激活此事件时,jLabel4 文本立即更改为 Task: Finished Exporting

为什么.exec(...); 命令不起作用?这不是命令语法,我尝试用touch new.file 替换我的命令,但这也不起作用。

在我看来,它似乎不会尝试执行命令。

Java 代码:

private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {                                           
    if (ext[1].equals("iso") || ext[1].equals("wbfs")) {
        String tmpPath = "";
        if (jtPath.indexOf(".") > 0)
             tmpPath = jtPath.substring(0, jtPath.lastIndexOf("."));

        Process p;
        try {
            p = Runtime.getRuntime().exec("wit extract \"" + jtPath + "\" \"" + tmpPath + "\"");
            p.waitFor();
            jLabel4.setText("Task: Exporting...");
            p.destroy();
        } catch (IOException ex) {
            Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InterruptedException ex) {
            Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
        System.out.println("wit extract \"" + jtPath + "\" \"" + tmpPath + "\"");

        jLabel4.setText("Task: Finished Exporting");
    } else {
        JOptionPane.showMessageDialog(null, "You can only extract .iso and .wbfs file formats.");
    }
}    

命令行输出:

wit extract "/home/adam/Wii Hacking/NSMBW SMNE01.wbfs" "/home/adam/Wii Hacking/NSMBW SMNE01"

【问题讨论】:

  • 一方面,您根本没有处理进程的流,有可能会耗尽缓冲区空间并且无法识别命令行错误消息。另一方面,您的代码违反了 Swing 线程规则。
  • 另外,您需要捕获并评估从 p.waitFor(); 返回的 int。
  • @HovercraftFullOfEels 退出值为27,不知道是什么意思。
  • 它应该以 0 退出。检查 wit 文档以了解该值的含义。并处理 InputStream 和 ErrorStream 进程以查看是否返回任何有用的信息并防止缓冲区内存不足。
  • @HovercraftFullOfEels 错误 27 是“无法打开文件”但是当我从终端而不是 java 执行相同的命令时,它工作正常。

标签: java linux user-interface command-line


【解决方案1】:

问题可能是文件名中的空格,或者更准确地说,引号在命令字符串中不起作用,因为它不是由 shell 处理的。

尝试使用接受字符串数组的exec 方法:

p = Runtime.getRuntime().exec(new String[] {"wit", "extract", jtPath, tmpPath});

并且仍然处理标准输出和错误。

【讨论】:

  • 也看看java.lang.ProcessBuilder - 它有点新,并且有一些很好的实用方法来重定向输入/输出。
猜你喜欢
  • 2012-10-09
  • 2011-06-11
  • 2012-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多