java程序调用bat,bat是调用另外一个常驻内存的java程序

问题描述

import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;public class Stream extends Thread {InputStream is;String type;Stream(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("ExecShell 执行SEHLL错误输出:" + line);else {System.out.println("ExecShell 执行SEHLL输出:" + line);if(line.endsWith("ServerMain.vi_remotePort=9999")){}}}} catch (Exception ioe) {ioe.printStackTrace();}}public static void main(String[] args) {try {Process pShell = Runtime.getRuntime().exec("cmd /C D:/work/gateway/script/StartLuServer.bat");Stream outputGobbler = new Stream(pShell.getInputStream(), "Output");Stream errorGobbler = new Stream(pShell.getErrorStream(), "Error");outputGobbler.start();errorGobbler.start();pShell.waitFor();Thread.sleep(200);pShell.destroy();} catch (Exception ex) {System.out.println("ExecShell Exception:" + ex.getMessage());}}}当执行bat到调用java后,程序就停住等待被调用的java执行完毕,问题是被调用的java程序是一个gateway性质,一直需要启动的程序,怎么让被调用的java仍然执行,而调用者继续执行下去? 问题补充:飞雪无情 写道

解决方案

你打开的gatway应该和你这个jvm平台没有关系了,那么你只要打开后就终止当前的线程,或者System.exit(0)强制退出,不管他了。这样索然所有的线程都终止了,但是你的gatway已经被打开了!
解决方案二:
这种情况不能满足。那个线程是由你这个主线程启动的,那么主线程结束的时候,那个线程也就结束了!
解决方案三:
new Thread(new Runnable(){ @Override public void run() { OSExecute.command(cmd); } }).start(); 要另开个线程,不然会一直等待你执行.
解决方案四:
你的意思是你的子线程执行 bat文件后,main主线程不继续执行型下面的代码了吗?这是我以前写的一个执行计算器的程序,你看看是否能帮助你public static void main(String[] args) {System.out.println(System.getProperty("file.encoding"));final String cmd="cmd /c calc";//让一个子线程去执行cmd命令Thread thread=new Thread(new Runnable(){@Overridepublic void run() {OSExecute.command(cmd);}});thread.start();System.out.println("继续执行。。。。");}

时间: 2025-01-21 08:47:53

java程序调用bat,bat是调用另外一个常驻内存的java程序的相关文章

Call 从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。_DOS/BAT

Call 从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序.call 命令接受用作调用目标的标签.如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用. 语法 call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]] 参数 [Drive:}[Path] FileName  指定要调用的批处理程序的位置和名称.filename 参数必须具有 .bat 或 .cmd 扩展名.  BatchPara

Java编程中使用XFire框架调用WebService程序接口_java

 JAVA调用webservice,当你刚开始接触的时候你会觉得它是一个恶梦,特别是没有一个统一的标准实现,比起.net的那些几步就可以完成的webservice实现,我们看着JAVA的实现真是伤心啊.但就算是伤心,我们也还是要完成的.JAVA也不乏比较好的实现,如xfire,jersey,CXF. 这里我们就一起来看一下xfire的实现.  1)首先,当然是要下包啦,这个普通人都知道.http://xfire.codehaus.org/Download可以到这里去下,可以下all也可以下dis

Java编程那些事儿54—方法调用

7.4 方法调用 方法声明是创建一个新的功能,声明出来的方法在需要的时候可以通过调用执行该方法的功能,方法只有被调用才能被执行. 在Java程序中有一个基本的main方法,其方法声明如下: public static void main(String[] args) 该方法包含在开始的代码框架中,这是一个特殊的方法.Java语法规定,J2SE的代码都从该方法开始执行,如果一个代码中没有main方法,则该代码不能被直接运行.所以main方法也称作J2SE程序的入口方法,在运行程序时,自动调用对应代

多线程- 我的java难道是盗版吗(调用有返回值的函数无响应)

问题描述 我的java难道是盗版吗(调用有返回值的函数无响应) boolean flag = pcSystem.returnTenderResult(bidDocu,tenderDocu); 我在自定义pcSystem类中调用一个具有boolean返回值的函数returnTenderResult(synchronized) 这条语句的上一条语句都会执行,而returnTenderResult内方法一定概率上不执行 (方法内的第一条语句都没有执行,还不涉及方法内具体逻辑),系统涉及了多线程, 这是

内部类-Java编程中A类如何调用B类中M方法里的C类的实例?

问题描述 Java编程中A类如何调用B类中M方法里的C类的实例? import java.awt.*; import java.awt.event.*; public class TestListener{ public static void main(String[] args){ Counter c1 = new Counter("Hello"); c1.CreatButton(); c1.add(c1.button); ----------------------------(

实例详解Java中如何对方法进行调用_java

方法调用Java支持两种调用方法的方式,根据方法是否返回值来选择. 当程序调用一个方法时,程序的控制权交给了被调用的方法.当被调用方法的返回语句执行或者到达方法体闭括号时候交还控制权给程序. 当方法返回一个值的时候,方法调用通常被当做一个值.例如: int larger = max(30, 40); 如果方法返回值是void,方法调用一定是一条语句.例如,方法println返回void.下面的调用是个语句: System.out.println("Welcome to Java!");

java树的节点事件里调用repaint方法 不能实现重绘

问题描述 java树的节点事件里调用repaint方法 不能实现重绘 java树的节点事件里调用repaint方法 不能实现重绘 怎么解决......................... 解决方案 http://zhidao.baidu.com/link?url=_s3y58ND8LIk-TtWOqBE2sXSaX5vKISRuxgRbdlCvZ2TPcjjujnp85-84Xto3Pa3rh7GEZ8yJ5ctIOYQxF7wTq

java的虚拟机有底层都调的是c吗?java能调用汇编嘛?阿门!

问题描述 java的虚拟机有底层都调的是c吗?java能调用汇编嘛?阿门! RT.往大师围观.java的指针封装的c那一块的指针嘛?java比较c又一次.nnd 解决方案 java可以用jni调用原生的代码,你可以用C(嵌入汇编)或者汇编去写一个dll给java调用. 但是注意,java本身是平台无关的,但是原生代码就不是.所以你要是调用了原生代码,那么比如你的pc的软件,就不容易移植给手机了. 解决方案二: Java虚拟机jvm--java虚拟机底层结构详解深入java虚拟机(一)--java

java matlab-java调用MATLAB打包的jar,Java application调用成功,jsp调用失败,不知道为什么

问题描述 java调用MATLAB打包的jar,Java application调用成功,jsp调用失败,不知道为什么 报错如下: java.lang.UnsatisfiedLinkError: Failed to find the library mclmcrrt710.dll, required by MATLAB Builder JA, on java.library.path com.mathworks.toolbox.javabuilder.internal.MCRConfigurat