Java不在Linux中执行命令

时间:2017-08-16 16:31:11

标签: java linux user-interface command-line

我正在为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"

1 个答案:

答案 0 :(得分:2)

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

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

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

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