Java Process.waitFor()方法详解

目录
  • Java Process.waitFor()方法
    • 描述
    • 声明
    • 参数
    • 返回值
    • 异常
    • 实例
  • process.waitFor()没有作用

Java Process.waitFor()方法

Process.waitFor()方法 将导致当前线程等待,直到该对象的进程结束,才返回调用。

描述

java.lang.Process.waitFor()方法将导致当前的线程等待,如果必要的话,直到由该Process对象表示的进程已经终止。此方法将立即返回,如果子进程已经终止。如果子进程尚未终止,则调用线程将被阻塞,直到子进程退出。

声明

以下是java.lang.Process.waitFor()方法的声明

public abstract int waitFor()

参数

  • NA

返回值

此方法返回的退出值的过程。按照惯例,0表示正常终止。

异常

  • NA

实例

下面的例子说明了如何使用lang.Process.waitFor()方法。

package com.yiibai;
public class ProcessDemo {
   public static void main(String[] args) {
      try {
         // create a new process
         System.out.println("Creating Process...");
         Process p = Runtime.getRuntime().exec("notepad.exe");

         // cause this process to stop until process p is terminated
         p.waitFor();

         // when you manually close notepad.exe program will continue here
         System.out.println("Waiting over.");

      } catch (Exception ex) {
         ex.printStackTrace();
      }
   }
}

编译运行结果:

Creating Process...

Waiting over.

process.waitFor()没有作用

最近在遇到关于视频需要转码 用到ffmpeg 使用cmd运行时,需要在cmd运行成功后进行操作,百度都说使用waitfor()方法,但是总是一闪而过, 没有起到等待完成的作用..

Process process = Runtime.getRuntime().exec("cmd /c start notepad.exe");
process.waitFor();

java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令。

  • cmd /c dir 是执行完dir命令后关闭命令窗口。
  • cmd /k dir 是执行完dir命令后不关闭命令窗口。
  • cmd /c start dir 会打开一个新窗口后执行dir指令,原窗口会关闭。
  • cmd /k start dir 会打开一个新窗口后执行dir指令,原窗口不会关闭。

这个代码中的process.waitFor();并没有起到作用

后面的代码在调用的notepad.exe还没结束就继续运行了,

结果发现是因为在exec里面用了start

这样的后果是process.waitFor()等待的是一个一闪而过的用来打开exe的命令行窗口而已.

去掉start这个词,就会等到exe结束程序在继续执行了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 解决Java中socket使用getInputStream()阻塞问题

    目录 socket使用getInputStream()阻塞 用线程解决Socket的getInputStream阻塞 1.背景 2.问题 3.原因 4.解决办法 5.Socket通信注意事项 socket使用getInputStream()阻塞 今天用socket进行编程练习时,发现程序到了getInputStream()这里就进行不下去了 Socket socket = new Socket("127.0.0.1", 800); ObjectInputStream reader =

  • Java编程使用Runtime和Process类运行外部程序的方法

    本文实例讲述了Java编程使用Runtime和Process类运行外部程序的方法.分享给大家供大家参考,具体如下: 使用Runtime.getRuntime().exec()方法可以在java程序里运行外部程序. 1. exec(String command) 2. exec(String command, String envp[], File dir) 3. exec(String cmd, String envp[]) 4. exec(String cmdarray[]) 5. exec(

  • Java Process详解及实例

    Runtime Java可以通过Runtime来调用其他进程,如cmd命令,shell文件的执行等.可以应该该类设置系统时间,执行shell文件.此处记录几个有用应用如下. 设置本地时间 可以调用cmd /c date命令,完成本地时间设置,不过这个命令在win7下可以使用,但是win10需要管理员权限,可能无法设置系统时间.win7下使用Java实现修改本地时间代码如下,需要注意的是waitFor是必须的,否则无法立即生效. /** * 设置本地日期 * @param date yyyy-MM

  • java调用process线程阻塞问题的解决

    java调用process线程阻塞问题 项目需求中涉及java调用.bat文件进行图像处理,先直接上简略版程序 public void draw(){ //调用bat脚本进行图像处理 Process process = null; InputStream in = null; try { process = Runtime.getRuntime().exec("startup.bat"); //输出测试 // in = process.getInputStream(); // Stri

  • 如何解决TCP socket的阻塞问题

    目录 解决TCP socket的阻塞问题 在异常处理程序当中退出socket连接 TCP连接阻塞的监控和处理 我们整理出符合该类异常的特征如下 如何查看一个连接的创建时间 解决TCP socket的阻塞问题 大家知道,tcp的读和写是阻塞的,即读的时候不知道什么时候读完,写的时候不知道什么时候写完,因此线程就一直暂停在哪里,一般tcp程序用在上位机下位机之间对吧! 下位机一些设备一般会发心跳报文给我们机器,假设为10s发一次吧,当机器超过10s没接收到数据,那么我们就要考虑把socket断开,因

  • 基于Process#waitFor()阻塞问题的解决

    目录 Process#waitFor()阻塞问题 Process.waitFor()导致主线程堵塞 Process#waitFor()阻塞问题 有时需要在程序中调用可执行程序或脚本命令: Process process = Runtime.getRuntime().exec(shPath); int exitCode = process .waitFor(); Runtime.getRuntime()返回当前应用程序的Runtime对象,该对象的exec()方法指示Java虚拟机创建一个子进程执

  • Java Process.waitFor()方法详解

    目录 Java Process.waitFor()方法 描述 声明 参数 返回值 异常 实例 process.waitFor()没有作用 Java Process.waitFor()方法 Process.waitFor()方法 将导致当前线程等待,直到该对象的进程结束,才返回调用. 描述 java.lang.Process.waitFor()方法将导致当前的线程等待,如果必要的话,直到由该Process对象表示的进程已经终止.此方法将立即返回,如果子进程已经终止.如果子进程尚未终止,则调用线程将

  • Java Process类的详解及实例代码

    Java Process类的详解 前言: 今天用了下Java.lang.Process类,只是初步的学习,并没有深入实践,因为感觉它的用途并不是很大,偶尔才可能用上,如果要经常使用它的人可以自行参考JDk文档. 对Process类的简要说明: Process类是一个抽象类,方法都是抽象的,它封装了一个进程,也就是一个可执行的程序  该类提供进程的输入.执行输出到进程.等待进程的完成和检查进程的退出状态及销毁进程的方法 ProcessBuilder.start()和Runtime.exec方法创建

  • Java发送post方法详解

    总结一下java使用http发送post的方法: 1.post请求用于发送json 格式的参数: /** * post请求(用于请求json格式的参数) * * @param url 地址 * @param params json格式的参数 * @return */ public static String doPost(String url, String params) throws Exception { CloseableHttpClient httpclient = HttpClien

  • jdk安装、Java环境配置方法详解

    一.简介 jdk是Java语言的软件开发工具包,主要用于移动设备.嵌入式设备上的Java应用程序.jdk是整个Java开发的核心,包含了Java环境,Java工具和Java的基础类库. jre(Java Runtime Environment,Java运行环境),运行Java程序所必须的环境的集合 包含JVM标准实现及Java的核心类库 包含Java虚拟机(jvm) Java核心类库和支持文件 它不包含开发工具(jdk)–编译器.调试器和其他工具. 如果只需要运行Java程序或Applet,下载

  • java基础之方法详解

    一.什么是方法 Java方法是语句的集合,他们在一起执行一个功能. 1.方法是解决一类问题的步骤的有序组合 2.方法包含于类或对对象中 3.方法在程序中被创建,在其他地方被应用 设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的结合.我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成一个功能,这样利于我们后期的扩展. 当然只读文字不能完全理解,下面的代码一定要自己一个个敲,仔细品味: //类 public class Demo01 { //mian方法,可理解为系统自定义的

  • Java枚举使用方法详解

    在实际编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的"数据集",春夏秋冬四个数据元素组成了四季的"数据集". 在java中如何更好的使用这些"数据集"呢?因此枚举便派上了用场,以下代码详细介绍了枚举的用法. package com.ljq.test; /** * 枚举用法详解 * * @author jiqinli

  • PHP CURL与java http使用方法详解

    php curl 有时候我们的项目需要与第三方平台进行交互.举个例子. 现在有A.B两个平台. 甲方在最初一段时间由A实现了一部分关键业务(如用户信息等). 然后基于一部分原因,现在有一些业务需要B来实现,且实现程序调用了一些敏感的接口只能在B方服务器上跑,那么只能做两个平台之间的交互了.curl 就是这种问题的解决方案. curl 是一个php扩展,你可以看作一个可以访问其他网站的精简版浏览器. 要使用curl 你得在php.ini 中开启相关的配置才能使用. 常用的平台之间交互的数据格式 有

  • php调用自己java程序的方法详解

    本文实例讲述了php调用自己的java程序实现方法.分享给大家供大家参考,具体如下: 最开始要装jdk这个就不用说了,我装的是java ee 5+jdk 1.把下载的php-java-bridge_5.2.2_j2ee.zip解压出来,里面有个JavaBridge.war 直接用winrar打开,到WEB-INF/lib/JavaBridge.jar 把这个jar包拷到 你的php目录的ext/下. 2.打开war包,里面有个java的文件夹,把他全部拷到你的PHP项目下,如/demo/java

  • Java模糊查询方法详解

    当我们需要开发一个方法用来查询数据库的时候,往往会遇到这样一个问题:就是不知道用户到底会输入什么条件,那么怎么样处理sql语句才能让我们开发的方法不管接受到什么样的条件都可以正常工作呢?这时where '1'='1'加上list就可以完美解决这个问题了,废话少说,上代码: // 模糊查询方法 public List<person> query() { List<person> list = new ArrayList<>(); Connection con = null

  • JAVA hashCode使用方法详解

    一.问题引入谈到hashCode就不得不说equals方法,二者均在Object类里,由于Object类是所有类的基类,所以一切类里都可以重写这两个方法.要想较清晰的理解,需要先知道容器Collection,Set,list,Map(key值不可重复),Set元素无序不重复,list元素有序可重复,那么JVM是如何确定不同的元素的呢?难道是逐个比较么,那样效率就太低了,JVM采用hash的方法(hash地址不一定是实际的物理地址),看看这个地址上是否有内容,没的话就认为不存在相同对象-- 且看下

随机推荐