Java:showInputDialog和ProcessBuilder

时间:2017-04-30 00:34:38

标签: java joptionpane processbuilder string-length ends-with

我刚开始使用Java进行编码,而我正在尝试制作一个程序来运行chkdsk,当我点击JButton时。我会在这里提供一些代码,以便你们可以帮助我:

String disk = JOptionPane.showInputDialog(Janela, "Especifique a letra do disco (Exemplo: C:)", "CHKDSK /F", JOptionPane.QUESTION_MESSAGE);
        if (disk.length() == 2 && disk.endsWith(":")) {
              try {
               String disk2 = ("fsutil dirty set " + disk)
               ProcessBuilder chkdskf = new ProcessBuilder("cmd.exe", "/C", "start", disk2);
               Process chkdskff = chkdskf.start();
              }
              catch (IOException fnfex2) {
               System.out.println ("Erro no CHKDSK /F");
             } 
            }

        else {
            JOptionPane.showMessageDialog(Janela, "Erro!", "Erro", JOptionPane.ERROR_MESSAGE);        
        }

所以,它显示了一个InputDialog,所以你可以放一个驱动器号(如C:或D :),然后检查字符串是否是我想要的方式。 (有两个字符,以“:”结尾)。然后,它启动一个新的cmd窗口,其命令使chkdsk在下次重新启动时运行。但是,它不起作用。执行代码时打开的CMD窗口标题为“fsutil dirty set C:”,但没有任何反应,也没有执行任何命令。感谢任何帮助,对不起我的英语很差。

2 个答案:

答案 0 :(得分:1)

start

的命令行帮助
  

STATE [“title”] [/ D path] ... [command / program] [parameters]

因此,基于此,这意味着startfsutil dirty set C:作为标题 - 原因在于ProcessBuilder参数的工作方式。

数组中的每个元素都是一个单独的参数发送到命令,这非常有用,因为这意味着您不必担心引号或其他转义要求

所以,基于这一切,你应该构建你的ProcessBuilder更像......

ProcessBuilder chkdskf = new ProcessBuilder("cmd.exe", "/C", "start", "Make it so", "fsutil", "dirty", "set", disk);

答案 1 :(得分:0)

我不知道你的实施方式。但我对你的推荐有所了解。让我们创建一个.bat文件,将execute语句写入此文件,然后调用以运行此.bat文件,如下所示:

Runtime.getRuntime().exec("cmd /c start " + "command.bat");