`
shappy1978
  • 浏览: 700603 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

调用Runtime.getRuntime().exec后等待命令处理完毕的问题

    博客分类:
  • J2EE
 
阅读更多

		try{
			String command = "xxx";
			Process child = Runtime.getRuntime().exec(command);
			child.waitFor();
		}catch(Exception e){
			e.printStackTrace();
		}

 上面的语句在unix和mac下调用都没问题,但是windows下就会出现主线程被阻塞(block)的问题了。

Because some native platforms only provide limited buffer size for standard input and output streams, failure to promptly write the input stream or read the output stream of the subprocess may cause the subprocess to block, and even deadlock.

参照 http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=1

暂时windows下面只是用延时来对付。

//************************************************************************************

另外发现windows下面还有一个问题

xx.class.getProtectionDomain().getCodeSource().getLocation().getPath()

读取到的路径是/c:/xxxx  前面多了一个斜杠,当然这个路径java是可以认的,但是命令行就不行了,另外分割符也不是反斜杠,不过这个还能认。

分享到:
评论

相关推荐

    使用runtime实现linux命令行或shell脚本多次调用

    在`ShellConsole`类中,我们使用`Runtime.getRuntime().exec("ls -l")`执行了`ls -l`命令,并通过`BufferedReader`读取并打印了命令的输出。注意,执行外部命令可能会抛出异常,因此需要妥善处理。 另一个类`Shell....

    Runtime 执行bat

    执行外部命令时可能会出现各种异常,如找不到命令、权限问题等,因此需要捕获并处理`IOException`。 7. **`ProcessBuilder`类** 除了`Runtime`,`ProcessBuilder`类提供了更高级的功能,如设置工作目录、环境变量...

    java执行可执行文件,Runtime.exec、ProcessBuilder、commons-exec

    - `waitFor()`用于等待进程执行完毕并返回退出状态。 #### 2. 使用`ProcessBuilder` 相比于`Runtime.exec()`,`ProcessBuilder`提供了更加强大和灵活的功能,并允许开发者更好地控制进程的执行。`ProcessBuilder`...

    Java使用Runtime.exec()给Windows命令提示符做了个外壳,真的很山寨!

    例如,`Runtime.getRuntime().exec("cmd /c " + command)`会执行一个CMD命令。 3. **输入输出流管理**:你需要连接到进程的输入流(`Process.getOutputStream()`)来发送命令,以及错误和标准输出流(`Process....

    java调用windows命令

    如果遇到无法删除的问题,可以尝试使用`Runtime.exec()`调用`del`命令强制删除文件。 在实际编程中,处理这些细节能够确保Java程序在Windows环境中正确地调用命令行操作。同时,为了提高代码的可维护性和可读性,...

    Android程序中(APK程序)执行Adb shell 命令

    Process process = Runtime.getRuntime().exec("su -c adb shell command"); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = ...

    Java调用Python的jar包

    首先,我们需要了解Java如何调用外部程序,这通常通过`java.lang.ProcessBuilder`类或`Runtime.getRuntime().exec()`方法来实现。这两个方法允许Java启动一个新的进程,并执行操作系统命令。因此,我们可以在Java中...

    java系统命令调用

    本文将详细介绍如何使用Java Runtime类中的`getRuntime().exec()`方法来调用系统命令,并提供一些实际应用场景的例子。 ### Java Runtime.getRuntime().exec() `java.lang.Runtime`类提供了运行时系统的表示形式,...

    java调用本地浏览器的demo

    首先,`Runtime.getRuntime().exec()`方法是Java标准库中用于执行系统命令的常用方式。例如,如果你想在Windows环境下打开默认浏览器,你可以这样写: ```java String url = "http://www.example.com"; Runtime....

    JAVA如何调用DOS命令.doc

    4. **等待命令执行结束**:调用`Process`对象的`waitFor()`方法来等待命令执行完毕。 #### 二、执行DOS内部命令 当需要执行DOS内部命令时,如`dir`或`echo`等,需要注意以下几点: - **使用命令解释器**:在...

    Java如何调用可执行文件和批处理命令.doc

    首先,调用Windows下的可执行文件(exe)在Java中相对简单,可以通过`Runtime.getRuntime().exec()`方法实现。以下是一个简单的示例: ```java try { String command = "notepad"; Process child = Runtime....

    Java调用Shell命令的方法

    首先,Java通过`Runtime.getRuntime().exec()`方法来执行外部命令,包括Shell命令。这个方法接受一个字符串数组作为参数,其中第一个元素是Shell解释器的路径(通常是`/bin/sh`),第二个元素是`-c`,表示接下来的...

    Java调用应用程序和Dos中的命令

    2. **异常处理**:在调用`Runtime.exec()`时,应妥善处理可能出现的`IOException`和`InterruptedException`。 3. **资源管理**:及时关闭输入流和释放相关资源,防止内存泄漏。 4. **跨平台性**:不同的操作系统可能...

    解决java执行cmd命令调用ffmpeg报错Concat error - No such filter '[0,0]'问题

    然而,在Java中通过`Runtime.getRuntime().exec()`或`ProcessBuilder`执行命令时,可能还会遇到问题,因为这些方法在处理命令行参数时有自己的规则。在某些情况下,即使在DOS窗口中可以成功执行的命令,通过Java执行...

    java 使用dos命令详解

    有时候我们需要等待一个命令完全执行完毕后再继续执行其他操作。这可以通过调用`Process.waitFor()`方法来实现。 ##### 示例5:等待命令执行完成 ```java Process process = Runtime.getRuntime().exec("cmd /c dir...

    Java调用Linux命令

    当我们调用`Runtime.getRuntime().exec(command)`时,实际上是在当前Java进程中启动了一个新的子进程。这个子进程没有自己的控制台或终端窗口,其标准输入、标准输出和标准错误都会被重定向到父进程的相应流中。具体...

    java调用shell命令.pdf

    在 Java 中,我们可以使用 `Runtime` 类的 `exec()` 方法来调用 Shell 命令。下面是一个简单的示例代码: ```java Process pid = Runtime.getRuntime().exec(new String[] {"/bin/sh", "-c", "ls -l"}); ``` 在这个...

    Android设备上非root的抓包实现方法(Tcpdump方法)

    在Android平台上,通常我们使用`Runtime.getRuntime().exec()`方法来执行系统命令,但这不适用于所有情况,特别是当涉及到需要更高权限的操作,如网络数据包抓包。由于Android系统的安全机制,大多数应用程序没有...

    java代码中调用linux/unix命令

    `Runtime.getRuntime().exec(String command)`或`Runtime.getRuntime().exec(String[] cmdArray)`可以执行单个命令。例如,执行`ls`命令可以写成: ```java Process process = Runtime.getRuntime().exec("ls"); ...

Global site tag (gtag.js) - Google Analytics