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是可以认的,但是命令行就不行了,另外分割符也不是反斜杠,不过这个还能认。
分享到:
相关推荐
在`ShellConsole`类中,我们使用`Runtime.getRuntime().exec("ls -l")`执行了`ls -l`命令,并通过`BufferedReader`读取并打印了命令的输出。注意,执行外部命令可能会抛出异常,因此需要妥善处理。 另一个类`Shell....
执行外部命令时可能会出现各种异常,如找不到命令、权限问题等,因此需要捕获并处理`IOException`。 7. **`ProcessBuilder`类** 除了`Runtime`,`ProcessBuilder`类提供了更高级的功能,如设置工作目录、环境变量...
- `waitFor()`用于等待进程执行完毕并返回退出状态。 #### 2. 使用`ProcessBuilder` 相比于`Runtime.exec()`,`ProcessBuilder`提供了更加强大和灵活的功能,并允许开发者更好地控制进程的执行。`ProcessBuilder`...
例如,`Runtime.getRuntime().exec("cmd /c " + command)`会执行一个CMD命令。 3. **输入输出流管理**:你需要连接到进程的输入流(`Process.getOutputStream()`)来发送命令,以及错误和标准输出流(`Process....
如果遇到无法删除的问题,可以尝试使用`Runtime.exec()`调用`del`命令强制删除文件。 在实际编程中,处理这些细节能够确保Java程序在Windows环境中正确地调用命令行操作。同时,为了提高代码的可维护性和可读性,...
Process process = Runtime.getRuntime().exec("su -c adb shell command"); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = ...
首先,我们需要了解Java如何调用外部程序,这通常通过`java.lang.ProcessBuilder`类或`Runtime.getRuntime().exec()`方法来实现。这两个方法允许Java启动一个新的进程,并执行操作系统命令。因此,我们可以在Java中...
本文将详细介绍如何使用Java Runtime类中的`getRuntime().exec()`方法来调用系统命令,并提供一些实际应用场景的例子。 ### Java Runtime.getRuntime().exec() `java.lang.Runtime`类提供了运行时系统的表示形式,...
首先,`Runtime.getRuntime().exec()`方法是Java标准库中用于执行系统命令的常用方式。例如,如果你想在Windows环境下打开默认浏览器,你可以这样写: ```java String url = "http://www.example.com"; Runtime....
4. **等待命令执行结束**:调用`Process`对象的`waitFor()`方法来等待命令执行完毕。 #### 二、执行DOS内部命令 当需要执行DOS内部命令时,如`dir`或`echo`等,需要注意以下几点: - **使用命令解释器**:在...
首先,调用Windows下的可执行文件(exe)在Java中相对简单,可以通过`Runtime.getRuntime().exec()`方法实现。以下是一个简单的示例: ```java try { String command = "notepad"; Process child = Runtime....
首先,Java通过`Runtime.getRuntime().exec()`方法来执行外部命令,包括Shell命令。这个方法接受一个字符串数组作为参数,其中第一个元素是Shell解释器的路径(通常是`/bin/sh`),第二个元素是`-c`,表示接下来的...
2. **异常处理**:在调用`Runtime.exec()`时,应妥善处理可能出现的`IOException`和`InterruptedException`。 3. **资源管理**:及时关闭输入流和释放相关资源,防止内存泄漏。 4. **跨平台性**:不同的操作系统可能...
然而,在Java中通过`Runtime.getRuntime().exec()`或`ProcessBuilder`执行命令时,可能还会遇到问题,因为这些方法在处理命令行参数时有自己的规则。在某些情况下,即使在DOS窗口中可以成功执行的命令,通过Java执行...
有时候我们需要等待一个命令完全执行完毕后再继续执行其他操作。这可以通过调用`Process.waitFor()`方法来实现。 ##### 示例5:等待命令执行完成 ```java Process process = Runtime.getRuntime().exec("cmd /c dir...
当我们调用`Runtime.getRuntime().exec(command)`时,实际上是在当前Java进程中启动了一个新的子进程。这个子进程没有自己的控制台或终端窗口,其标准输入、标准输出和标准错误都会被重定向到父进程的相应流中。具体...
在 Java 中,我们可以使用 `Runtime` 类的 `exec()` 方法来调用 Shell 命令。下面是一个简单的示例代码: ```java Process pid = Runtime.getRuntime().exec(new String[] {"/bin/sh", "-c", "ls -l"}); ``` 在这个...
在Android平台上,通常我们使用`Runtime.getRuntime().exec()`方法来执行系统命令,但这不适用于所有情况,特别是当涉及到需要更高权限的操作,如网络数据包抓包。由于Android系统的安全机制,大多数应用程序没有...
`Runtime.getRuntime().exec(String command)`或`Runtime.getRuntime().exec(String[] cmdArray)`可以执行单个命令。例如,执行`ls`命令可以写成: ```java Process process = Runtime.getRuntime().exec("ls"); ...