可执行jar包调用exe可执行文件,子进程堵塞

背景:

需要在项目的测试工具中添加一个按钮,点击后直接打开某exe工具。

这个工具的功能是导入txt文件,转为excel报表输出。

无奈解析了两行之后就停止不动了,也不报错。关闭测试工具后,就很顺畅的继续运行。

原因:

txt转excel报表过程中,中间信息是存在内存中的,缓存区的空间被占满后,程序就被阻塞了,一直在等待缓存区空间资源的释放,所以需要建立线程及时清空缓存区。

解决办法:

1.创建StreamClean线程类

/*
 * 建立线程及时清除阻塞区,避免子线程阻塞(调用外部工具txt->excel时发生的问题。)
 */
public class  StreamClean extends Thread { 

    InputStream is;
    String type; 

    public StreamClean (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){
                System.out.println(type + ">" + line); //控制台输出
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
} 

2.在调用exe执行文件处添加下列代码

      Process process = null;
	try {
		 process =Runtime.getRuntime().exec(txtToexcel); //txtToexcel是调用工具的dos命令
		 new StreamClean(process.getInputStream(), "INFO").start();
		 new StreamClean(process.getErrorStream(), "ERROR").start();
		 process.waitFor();
	     }catch (Throwable t) {
		t.getStackTrace();
	     } finally {
		if (process != null){
		    process.destroy();
		}
		process = null;
	    }
		

再执行就木有问题啦~~~

时间: 2024-10-03 05:51:36

可执行jar包调用exe可执行文件,子进程堵塞的相关文章

Java项目生成可执行jar包、exe文件以及在Windows下的安装文件

1.如何通过eclipse将Java项目生成可执行jar包 首先把在eclipse下的java项目导出jar file 下一步 下一步 下一步 最后点击完成,便生成了可执行的jar文件.可以在刚刚选择导出目录的文件夹中找到. 2.将刚刚生成的jar文件导出可执行的.exe文件,首先安装exe4j软件,下载地址如下:http://www.jb51.net/softs/541579.html,下载后安装破解.打开界面如下 直接下一步,选择第二个 下一步 下一步 如果要在64位下运行,则要点击下面那个

eclipse导出可执行JAR包

Jar是在发布Java应用程序时用到的一种文件格式. JAR是 Java Archive File的缩写,是 Java 的一种文档格式,可将多个文件合并为单个JAR归档文件,jar是个多用途的存档及压缩工具,它基于ZIP和ZLIB压缩格式.JAR 文件非常类似 ZIP 文件,准确的说,它就是 ZIP 文件.JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的,这里做一个实验:

JAVA生成(可执行)Jar包的全面详解说明 [打包][SpringBoot][Eclipse][IDEA][Maven][Gradle][分离][可执行]

辛苦所得,转载还请注明: https://www.cnblogs.com/applerosa/p/9739007.html  得空整理了关于java 开发中,所有打包方式的 一个操作方法, 有基于IDE的,有基于构建工具的. 这里还是比较建议新手朋友尽快习惯 maven 和 gradle 等构建工具自带的打包方式. 不是说逼格高,的确是因为不依赖 IDE, 配置好 一两行命令就搞定. 离开IDE 照样出包. 大概分为这几个步骤 一.  关于Jar 包(example.jar) 的 结构/作用/使

用指定jdk执行jar包

在运行jar包前执行以下命令,作用是在当前命令行窗口作用域内修改环境变量: export JAVA_HOME=/root/jiabao.gao/Hbase2Redis-1.0.0-SNAPSHOT/jdk1.7.0_55export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport MAX_LOCKED_MEMORY=unlimitedG 执行后用exp

Java打包可执行jar包 包含外部文件

外部文件在程序中设置成相对当前工程路径,执行jar包时,将外部文件放在和jar包平级的目录. 1 public class Main { 2 3 4 public static void main(String[] args) throws IOException, InterruptedException { 5 6 String a=args[0]; 7 8 String b=args[1]; 9 10 String c=args[2]; 11 12 String[] cmd=new Str

Gradle构建可执行Jar包(转载请注明出处)

最近开始接触Java,认识到一个似乎比Maven好用的构建工具Gradle,还来不及细细研究,但是需要构建一个可执行Jar包.上网查了一下.中文的文章千篇一律的提到一个插件apply plugin: 'executable-jar' (https://github.com/stigkj/gradle-executable-jar-plugin) ,也不知道是谁复制了谁的. 但是构建的时候不认这个插件,所以寻找其他方法. 用压缩软件打开Eclipse生成的可执行Jar包与Gradle构建的Jar包

Intellijidea 打可执行jar包

工作中使用intellijidea 16将一个java程序打包成可执行jar包时出现问题, Error: Invalid or corrupt jarfile project.jar 的问题,无法运行jar包 解决方法: 我的最终要求是将程序和外部依赖打成一个可运行的jar包,而不是将程序和依赖分开,所以,在File -> project Structure 选择Artifacts,点击+,选择jar,选择From modules with Dependencies. 出来如下图: 在Main

eclipse生成可执行jar包[转]

相信大家在开发java的时候一定会遇到要求将java工程打包成可运行的jar的需求,今天我在这篇博客中详细讲解一下生成可运行jar的两种方法,亲测完全可行. 1. 工程中不包含第三方的jar包 这种情况比较简单,选中需要生成jar的工程,右击-->Export,出现如下的窗口 选中java--- > JAR file,出现如下窗口, 此处要: 选中 Export generated class files and resources: 选中 Compress the contents of t

IntelliJ IDEA导出Java 可执行Jar包

原文:IntelliJ IDEA导出Java 可执行Jar包 保证自己的Java代码是没有问题的,在IDEA里面是可以正常运行的,然后,按下面步骤: 打开File -> Project Structure -> Artifacts,如下图 IDEA导出Java 可执行Jar包" title="IntelliJ IDEA导出Java 可执行Jar包"> 点击"+",选择"Jar",选择Empty或From modules