- 浏览: 48433 次
- 性别:
- 来自: 北京
最新评论
-
NEO_ONE:
awk '!x[$0]++' all_EN.txt > ...
Centos手动设置IP(不用dhcp) -
NEO_ONE:
Update Table1 set c = (select c ...
Oracle_Two
解决process.waitFor()阻塞
- 博客分类:
- Java
private static void exeBat(){ Process p = null; try { p = Runtime.getRuntime().exec("tts.bat"); //获取进程的标准输入流 final InputStream is1 = p.getInputStream(); //获取进城的错误流 final InputStream is2 = p.getErrorStream(); //启动两个线程,一个线程负责读标准输出流,另一个负责读标准错误流 new Thread() { public void run() { BufferedReader br1 = new BufferedReader(new InputStreamReader(is1)); try { String line1 = null; while ((line1 = br1.readLine()) != null) { if (line1 != null){} } } catch (IOException e) { e.printStackTrace(); } finally{ try { is1.close(); } catch (IOException e) { e.printStackTrace(); } } } }.start(); new Thread() { public void run() { BufferedReader br2 = new BufferedReader(new InputStreamReader(is2)); try { String line2 = null ; while ((line2 = br2.readLine()) != null ) { if (line2 != null){} } } catch (IOException e) { e.printStackTrace(); } finally{ try { is2.close(); } catch (IOException e) { e.printStackTrace(); } } } }.start(); p.waitFor(); p.destroy(); System.out.println("tts退出=========================================="); } catch (Exception e) { try{ p.getErrorStream().close(); p.getInputStream().close(); p.getOutputStream().close(); }catch(Exception ee){} } }
发表评论
-
android sdk manager不能更新
2012-09-05 20:55 976Eclipse输出错误reason: Connection t ... -
进制转换
2012-06-12 15:10 6491. 十 -----> 二 给你一个十进制,比如: ... -
lucene3.5例子
2012-04-09 17:38 918package com.lucene; import j ... -
win端口占用查看
2012-01-09 16:58 776C:\>netstat -ano | findstr & ... -
ABNF
2011-12-15 11:19 1058BNF 巴科斯范 ... -
全角半角转换
2011-11-09 17:39 871public class Convert { public ... -
System.getProperty()
2011-11-02 17:19 832java.version Java ... -
正则匹配标点
2011-10-27 15:39 694摘抄:str = str.replaceAll("[ ... -
暂时很强大的正则
2011-10-26 22:37 681最新手机号: (13[0-9]|15[0|3|6|7|8 ... -
JS post提交表单
2011-09-23 10:15 2203js post方式提交表单有两种办法,1:AJAX提交 2:在 ... -
轻量级synchronized
2011-09-19 10:59 931后台admin给用户加分,点的快了,会加两次分,在前台没限制的 ... -
MD5__java应用
2011-09-18 15:21 724public final static String enco ... -
会话跟踪
2011-09-11 10:32 682Cookie : 分为会话cookie,持久cookie ... -
MAP遍历
2011-09-08 23:07 649//最常规的一种遍历方法,最常规就是最常用的,虽然不复杂, ... -
JAVA date处理
2011-08-04 14:05 704Date now=new Date(); Lo ... -
java日期处理小例子
2011-07-22 11:47 591import java.text.SimpleDateForm ... -
action type redirect 参数传递
2011-06-16 15:10 986在使用Struts2开发时,有时需要用redirect 来跟多 ... -
js replace
2011-06-08 16:10 720去掉“” :req.responseText.replace ... -
java使用代理访问网络的几种方法
2011-06-02 14:23 921方法一使用系统属性来完成代理设置, 这种方法比较简单, 但是不 ... -
项目不能发布到Tomcat
2011-05-31 14:56 1057原因: 在工程转移过程中,导致工程的 ...
相关推荐
`Process`对象的`waitFor()`方法会阻塞直到进程结束,返回值是进程的退出码: ```java int exitCode = process.waitFor(); System.out.println("Process exited with code: " + exitCode); ``` ### 6. 销毁进程 ...
原因是`process.waitFor()`会在输入流缓冲区填满之前阻塞,导致进程无法继续输出数据。为了解决这个问题,我们可以使用一个额外的线程来不断地从输入流中读取数据,这样就可以确保数据能够及时被处理,而不会堵塞...
- **等待命令完成**:调用`process.waitFor()`来阻塞当前线程,直到命令执行完成。 - **清理资源**:确保关闭所有打开的流,并且在不再需要进程时调用`process.destroy()`。 3. **示例代码**: 以下是一个简单的...
解决此问题的一种方法是在调用`waitFor()`之前先读取DOS窗口的标准输出缓冲区的内容。可以使用Java的`BufferedReader`来实现这一点: ```java String ls_1; Process process = Runtime.getRuntime().exec("cmd /c ...
`process.waitFor()`方法会阻塞直到命令执行完毕。 对于更复杂的命令,如需要参数、环境变量或者管道操作,可以使用`ProcessBuilder`类。例如,下面的代码创建了一个`ProcessBuilder`实例,设置了命令和参数,并将...
但是,需要注意的是,如果该命令是有标准输出或者是错误输出的话,必须在 waitFor 方法阻塞之前,通过读取 Process 对象的 getErrorStream 和 getInputStream 的内容来捕获所有的标准输出或者是错误输出。...
int exitCode = process.waitFor(); // 等待命令执行完成并获取退出码 BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader....
`waitFor()`方法会阻塞直到子进程结束,返回的`exitCode`表示进程的退出状态。 然而,`Runtime.exec()`方法有一些限制,例如处理输入/输出流可能不够灵活。为了解决这些问题,可以使用`ProcessBuilder`类。`...
process.waitFor(); } catch (IOException | InterruptedException e) { e.printStackTrace(); } ``` 在这个例子中,Java启动了记事本程序。`IOException`和`InterruptedException`需要捕获,因为执行外部程序...
`process.waitFor()`会阻塞直到pdftotxt命令执行完毕,返回的`exitCode`用于检查命令是否成功执行。 这种方式的优点在于它允许你利用系统级别的资源来处理大文件,而不会过度消耗Java应用程序本身的内存。同时,...
调用`Process.waitFor()`方法可以等待子进程结束并返回退出码,这可以帮助我们判断脚本是否成功执行: ```java int exitCode = process.waitFor(); System.out.println("Exit code: " + exitCode); ``` 4. **...
为了防止输出缓冲区满导致`waitFor()`阻塞,我们需要捕获并处理这些输出。Java的`Process`类提供了`getInputStream()`和`getErrorStream()`方法来获取这些流。以下代码展示了如何读取脚本的输出: ```java ...
process.waitFor(); } catch (IOException | InterruptedException e) { e.printStackTrace(); } ``` 2. 使用`ProcessBuilder`执行脚本: ```java String[] command = {"cmd", "/c", "script.bat", "arg1", "arg2...
需要注意的是,如果命令的执行时间过长,`waitFor()`方法也会阻塞较长时间,因此在实际应用中要考虑到这一点。 ### 总结 通过Java的`Runtime`类,我们可以轻松地执行外部的可执行文件和批处理文件。这种方式不仅...
使用`waitFor()`方法可以阻塞当前线程,直到子进程结束: ```java int exitCode = process.waitFor(); if (exitCode == 0) { System.out.println("Process completed successfully."); } else { System.out....
如果不想阻塞主线程,可以使用`Process`的`start()`方法异步启动命令,然后使用`waitFor()`方法等待命令执行完成。同时,为了防止内存泄漏,记得关闭所有的输入/输出流。 ```java Process process = pb.start(); ...
`waitFor()`方法会阻塞直到进程结束,返回值是进程的退出码,通常0表示成功。 值得注意的是,执行外部程序可能会受到当前用户的权限限制,因此确保.exe文件有适当的执行权限,并且Java程序有足够的权限去执行它。...
`waitFor()`方法是`Process`类的一个成员,它阻塞当前线程,直到子进程终止,然后返回子进程的退出码。在大多数操作系统中,0表示正常退出,非零值(如1)通常表示异常或错误。这个返回值是由子进程决定的,而不是...
- `waitFor()`:阻塞当前线程,直到子进程完成。 - `destroy()`:销毁子进程,使其立即终止。 ### 示例代码 下面是一个简单的示例,演示如何使用`Runtime.exec()`来执行Linux命令“ls”: ```java public class ...