Runtime.getRuntime()。exec(),执行Java类
我正在从我的应用程序中执行Java类。
proc = Runtime.getRuntime().exec("java Test");
如何识别Test
是否成功执行(即没有例外)?
重定向输出/错误:
proc = Runtime.getRuntime().exec(new String[] { "java", mclass, ">NUL 2>test.txt" });
从cmd
:
java Main >NUL 2>test.txt
process.waitFor(); int exitCode = process.exitValue(); if(exitCode == 0) { // success } else { // failed }
如果Test
设计正确并返回适当的退出代码(通常在出现问题时> 0),这都可行。
如果你想得到Test
的输出/错误信息以确定错误,你应该得到proc.getInputStream()
(这将返回子进程的输出流), proc.getErrorStream()
并从输入流中读取分离线程。
请注意,如果子进程写入错误/输出流并且没有读取器,则它将被阻止。 因此,在任何情况下读取过程的错误/输出流都是有用的。
避免子阻塞的另一个选择是将其错误/输出重定向到文件和/或/dev/null
(Windows的’NUL’):
Runtime.exec("java Test >/dev/null 2>&1"); Runtime.exec("java Test >/dev/null 2>erroroutput");
重定向由shell处理器完成,而不是由Runtime.exec()
(至少不在Windows上)。
您需要通过cmd.exe
执行命令:
String command = "cmd /c java -classpath D:\\dev\\temp\\ Main >NUL 2>test.txt"; proc = Runtime.getRuntime().exec(command);
请参阅Process类
您可以调用proc.waitFor()
来返回整数值。 但是你必须确保正确处理程序的所有输出(例如使用proc.getInputStream()
方法)。
你试过proc.exitValue()
吗?
呃…什么? 这样做:
int response = (int)(getClass().getClassLoader().findClass("Test"). getMethod("someStaticMethod", new String[]{}). invoke(null, new Object[]{}));
这将调用动态加载的类“Test”的静态方法“int someStaticMethod()”。
您可以使用ProcessBuilder类来执行这些文件。
- 如何将数据库查询映射到Object ?
- 所有信任的HostnameVerifier都会导致HttpURLConnection出现SSL错误
- 在Swing应用程序中更改运行时的字体大小
- PowerMock和Java 8问题:InterfaceMethodrefInfo无法强制转换为MethodrefInfo
- 你可以从子接口那个接口的接口调用父接口的默认方法吗?
- 无法使用Maven依赖项运行Htmlunit应用程序
- Keymap,InputMap,ActionMap,KeyListener – 选择重载
- 在where子句中使用like命名查询
- 如何使用Java EE 7和Glassfish 4在IntelliJ IDEA Community Edition中创建Java Servlet应用程序?