我正在使用Java为Java源文件创建代码编辑器。当我点击RUN
菜单时,它会完全打开cmd
并运行javac
命令,但问题是它会立即关闭,我想要暂停。
这是我的代码:
Runtime rt = Runtime.getRuntime();
try {
rt.exec("cmd.exe /c start java Maq");
} catch (IOException e1) {
e1.printStackTrace();
}
如何摆脱这个问题?
答案 0 :(得分:2)
现在您已确认您确实需要javac并正在使用IDE /编辑器,处理编译错误的正确方法是使用javax.tools.JavaCompiler
从JRE进行编译。
JavaCompiler
为您提供精确的控制,跨平台功能,并始终存在。您可以查看the JavaDoc以开始使用。这是a nice example的用法。
我亲自将它用于类似项目的IDE,它完全符合您对程序内编译器的期望。
答案 1 :(得分:0)
命令的“start”位将Java与cmd进程分离。
你最好写一个包含这样的东西的批处理脚本:
@echo off
java Maq
pause
然后使用Runtime.exec(...)
调用该批处理文件答案 2 :(得分:0)
要查看javac
的输出,您无法使用Runtime.exec()
。请改用ProcessBuilder
。您的代码可能如下所示:
ProcessBuilder pb = new ProcessBuilder("javac", "Maq.java");
pb.directory(new File("/path/to/source/code/"));
Process p = pb.start();
InputStream in = p.getInputStream(); // this is connected to the System.out from javac
int exit = p.waitFor(); // wait for javac to finish
StringBuilder text = new StringBuilder();
char[] buf = new char[1024]; int read;
while ((read = in.read(buf)) != -1)
text.append(new String(buf, 0, read));
text.append("\n\njavac returned with exit code ").append(exit);
// display text - it now contains javac's output and its exit code
JFrame f = new JFrame("javac's output");
JTextPane tp = new JTextPane();
tp.setText(text.toString());
tp.setEditable(false);
f.setContentPane(tp);
f.setSize(500, 400); // or whatever
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setVisible(true);
答案 3 :(得分:0)
来自this问题的回答帮助了我:)。
Runtime rt = Runtime.getRuntime();
try {
rt.exec("cmd.exe /c cd /d d: & start cmd.exe /k javac Maq.java");
} catch (IOException e1) {
e1.printStackTrace();
}