JAVA调用一个bat批处理程序,调用几十次后会莫名的不再执行,无任何异常抛出。千试万试,LOG精细到逐行,只知道走到Runtime.getRuntime().exec()程序就停止了,但打死不知道为什么。那真以为里面有鬼。后来寻摸着Runtime.getRuntime().exec()有问题,真给我找到答案了。
大概原因是,调用Runtime.getRuntime().exec()后,如果不及时捕捉进程的输出,会导致JAVA挂住,看似被调用进程没退出。所以,解决办法是,启动进程后,再启动两个JAVA线程及时的把被调用进程的输出截获。
一下子,整个世界清爽多了。。。
原先程序只有一句:Runtime.getRuntime().exec(strMakePathPath);
后来程序更改为:
Process proc = Runtime.getRuntime().exec(strMakePathPath);
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "Error");
StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "Output");
errorGobbler.start();
outputGobbler.start();
proc.waitFor();
public class StreamGobbler extends Thread {
InputStream is;
String type;
public StreamGobbler(InputStream is, String type) {
this.is = is;
this.type = type;
}
public void run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
if (type.equals("Error")) {
System.out.println("Error :" + line);
} else {
System.out.println("Debug:" + line);
}
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
分享到:
相关推荐
在`ShellConsole`类中,我们使用`Runtime.getRuntime().exec("ls -l")`执行了`ls -l`命令,并通过`BufferedReader`读取并打印了命令的输出。注意,执行外部命令可能会抛出异常,因此需要妥善处理。 另一个类`Shell....
Process process = Runtime.getRuntime().exec(command); // 处理子进程的输入、输出和错误流,以避免阻塞 } catch (IOException e) { e.printStackTrace(); } ``` 这里的`"cmd.exe"`是Windows系统的命令解释...
完美解决runtime.exec()执行进程block死锁以及为waitFor设置超时 不需要耗cpu的循环判断exitValue==0 开两个进程搞定
1,申请root权限Runtime.getRuntime().exec("su"); 2,通过数据输出流DataOutputStream写入pm install命令; 3,最后获取Process进程的返回值int i = process.waitFor();,如果i=0,则表明已获取root权限。
windows环境下IDEA java代码Runtime.getRuntime.exec中shell的执行环境的解决方案前言解决办法后记 前言 在使用IDEA本地开发监控守护线程的后台,我遇上了执行环境不兼容的问题,爆出各种“xxx不是内部或外部命令,...
常见问题 在使用 java.lang.Runtime.exec() 方法时,可能会遇到一些常见的问题,例如: * 命令参数中不能使用空格。 * 重定向和管道字符的使用问题。 * 命令执行失败的问题。 结论 java.lang.Runtime.exec() ...
import org.apache.commons.exec.PumpStreamHandler; public class ExeRunUtil { public static void runWithCommonsExec(String... command) { CommandLine cmdLine = CommandLine.parse(command[0]); for (int...
这里不是通过view来截图,也不是通过底层的framebuffer实现截图,而是采用另外一种方法实现截图,通过Runtime.getRuntime().exec()来实现,并保存在sdcard上,代码很简单。
这通常涉及使用`Runtime.getRuntime().exec()`方法来执行shell命令。 4. **解析和显示日志**:将`adb logcat`的输出解析成日志条目,然后在界面上展示。每个条目包含时间戳、优先级、标签和消息。你可以创建一个...
例如,`Runtime.getRuntime().exec("cmd /c " + command)`会执行一个CMD命令。 3. **输入输出流管理**:你需要连接到进程的输入流(`Process.getOutputStream()`)来发送命令,以及错误和标准输出流(`Process....
首先,我们需要了解Java如何调用外部程序,这通常通过`java.lang.ProcessBuilder`类或`Runtime.getRuntime().exec()`方法来实现。这两个方法允许Java启动一个新的进程,并执行操作系统命令。因此,我们可以在Java中...
Process process = Runtime.getRuntime().exec("su -c adb shell command"); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = ...
如果需要强制结束,只需添加`/F`参数,如`Runtime.getRuntime().exec("taskkill /F /im Notepad.exe")`。 然而,使用Jacob库操作Office进程可能存在效率低下和服务器稳定性问题。微软官方建议不要在服务器端自动...
如果遇到无法删除的问题,可以尝试使用`Runtime.exec()`调用`del`命令强制删除文件。 在实际编程中,处理这些细节能够确保Java程序在Windows环境中正确地调用命令行操作。同时,为了提高代码的可维护性和可读性,...
首先,`Runtime.getRuntime().exec()`方法是Java标准库中用于执行系统命令的常用方式。例如,如果你想在Windows环境下打开默认浏览器,你可以这样写: ```java String url = "http://www.example.com"; Runtime....
`Runtime.getRuntime().exec()` 方法是Java中用于执行外部命令的一个关键接口,它允许Android应用在运行时执行shell命令。在"安卓程序发送linux指令.zip"这个压缩包中,我们重点关注的是如何使用Java在Android应用中...
Runtime runtime = Runtime.getRuntime(); try { runtime.exec("cmd /c start " + url); } catch (IOException e) { e.printStackTrace(); } } /** * 鍦ㄥ欢杩熸寚瀹氱殑绉掓暟鍚庡叧鏈? * ...
在移动设备中,IMEI(International Mobile Equipment Identity)号是一个独特的15-17位数字序列号,用于识别每一部GSM和WCDMA网络的移动设备。它就像手机的身份证,帮助运营商追踪和管理设备。...
这里的代码使用 Runtime.getRuntime().exec() 方法来执行 exp 命令,将 Oracle 数据库数据导出到文件 d:\t.dmp 中。 类似地,使用以下代码可以将数据从文件中导入到 Oracle 数据库中: ```java public boolean imp...