【问题标题】:Java: showInputDialog and ProcessBuilderJava:showInputDialog 和 ProcessBuilder
【发布时间】:2017-04-30 00:34:38
【问题描述】:

我刚开始用 Java 编写代码,我正在尝试制作一个程序来在单击 JButton 时运行 chkdsk。我将在这里放一些代码,以便你们帮助我:

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窗口标题为“fsutildirty set C:”,但是什么也没发生,没有执行命令。任何帮助表示赞赏,并为我糟糕的英语感到抱歉。

【问题讨论】:

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


    【解决方案1】:

    来自start的命令行帮助

    STATE ["title"] [/D 路径] ... [命令/程序] [参数]

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

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

    因此,基于所有这些,您应该构建您的 ProcessBuilder 更像...

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

    【讨论】:

      【解决方案2】:

      我不知道你的实现方式。但我有一个想法供你参考。让我们创建一个 .bat 文件,将执行语句写入此文件,然后调用以运行此 .bat 文件,如下所示:

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

      【讨论】:

      • 但是如果我创建一个bat文件,我无法使用变量disk来设置我要运行命令的磁盘。
      • “我要运行命令的磁盘”是你保存.cmd文件的地方
      猜你喜欢
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 2014-08-07
      • 2011-10-14
      • 1970-01-01
      相关资源
      最近更新 更多