Java:showInputDialog 和 ProcessBuilder
Java: showInputDialog and ProcessBuilder
我刚开始在 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 window,并在下次重新启动时使用 make chkdsk 运行 命令。但是,它不起作用。执行代码时打开的CMDwindow标题为"fsutil dirty set C:",但是没有任何反应,没有执行任何命令。感谢您的帮助,抱歉我的英语不好。
不知道你是怎么实现的。但我有一个想法供你参考。让我们创建一个 .bat 文件,将执行语句写入该文件,然后像这样调用 运行 这个 .bat 文件:
Runtime.getRuntime().exec("cmd /c start " + "command.bat");
来自 start
的命令行帮助
STATE ["title"] [/D path] ... [command/program] [parameters]
因此,基于此,这意味着 start
以 fsutil dirty set C:
作为标题 - 原因是参数在 ProcessBuilder
中的工作方式。
数组中的每个元素都是发送到命令的单独参数,这非常有用,因为这意味着您无需担心引号或其他转义要求
因此,基于所有这些,您应该构建您的 ProcessBuilder
更像...
ProcessBuilder chkdskf = new ProcessBuilder("cmd.exe", "/C", "start", "Make it so", "fsutil", "dirty", "set", disk);
我刚开始在 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 window,并在下次重新启动时使用 make chkdsk 运行 命令。但是,它不起作用。执行代码时打开的CMDwindow标题为"fsutil dirty set C:",但是没有任何反应,没有执行任何命令。感谢您的帮助,抱歉我的英语不好。
不知道你是怎么实现的。但我有一个想法供你参考。让我们创建一个 .bat 文件,将执行语句写入该文件,然后像这样调用 运行 这个 .bat 文件:
Runtime.getRuntime().exec("cmd /c start " + "command.bat");
来自 start
STATE ["title"] [/D path] ... [command/program] [parameters]
因此,基于此,这意味着 start
以 fsutil dirty set C:
作为标题 - 原因是参数在 ProcessBuilder
中的工作方式。
数组中的每个元素都是发送到命令的单独参数,这非常有用,因为这意味着您无需担心引号或其他转义要求
因此,基于所有这些,您应该构建您的 ProcessBuilder
更像...
ProcessBuilder chkdskf = new ProcessBuilder("cmd.exe", "/C", "start", "Make it so", "fsutil", "dirty", "set", disk);