首页 > 编程语言 >java中调用exe程序和问题处理

java中调用exe程序和问题处理

时间:2024-01-11 12:13:08浏览次数:29  
标签:exe java String BufferedReader 调用 reader new line

常规方法如下:

public class RunExe {
    public static void main(String[] args) {
        try {
            // exe文件的完整路径
            String filePath = "C:\\path\\to\\your\\program.exe";

            // 运行exe程序
            Process p = Runtime.getRuntime().exec(filePath);

            // 你也可以读取程序的输出(如果需要)
            BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }

            // 等待程序执行完毕并输出退出值
            int exitCode = p.waitFor();
            System.out.println("Exited with code: " + exitCode);

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

当用cmd执行exe,并且需要切换到exe目录下的话,需要改造filePath:

String command = "cmd /c d: && cd D:/PMF && ME-2.exe ";

先切换到d盘,然后切换到d:/PMF目录,然后执行exe。

问题1:idea停了之后,exe才运行。并且process.waitFor()这个代码执行后,程序一直等待。

Process process = Runtime.getRuntime().exec("你的命令");

// 处理标准输出
new Thread(() -> {
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}).start();

// 处理错误输出
new Thread(() -> {
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream()))) {
        String line;
        while ((line = reader.readLine()) != null) {
            System.err.println(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}).start();

// 等待进程结束
int exitValue = process.waitFor();
if (exitValue == 0) {
    // 执行成功的处理
} else {
    // 执行失败的处理
}

在这个示例中,创建了两个线程,分别用于读取外部进程的标准输出和错误输出。这可以防止因为未读取输出而导致的进程挂起。同时,这样的处理也使得Java程序能够即时地获取和响应外部进程的输出。

问题2:程序部署到tomcat后,调用exe的时候报错:java.io.FileNotFoundException

这个一般是权限不够导致的,处理方法如下:

1、修改exe文件目录的权限

 

2、修改tomcat登录身份

3、修改tomcat目录权限

 

标签:exe,java,String,BufferedReader,调用,reader,new,line
From: https://www.cnblogs.com/tiandi/p/17958255

相关文章

  • java_Long、long精度丢失问题
    解决方式1:对象字段(long类型)增加注解 @JsonSerialize(using=ToStringSerializer.class)解决方式2:(推荐)增加配置文件(全局)@ConfigurationpublicclassSerialConfig{@BeanpublicObjectMapperjacksonObjectMapper(Jackson2ObjectMapperBuilderbuilder){......
  • Java版Flink(十一)时间语义和watermark
    Java版Flink(十一)时间语义和watermark一、时间语义在Flink中涉及到三个重要时间概念:EventTime、IngestionTime、ProcessingTime。1.1、EventTimeEventTime表示日志事件产生的时间戳,每一条数据都会记录自己生产的时间。1.2、IngestionTimeIngestionTime表示数据进入......
  • JVS逻辑引擎调用规则引擎:深入剖析工作原理与应用场景
    在当今的数字化时代,业务逻辑和规则的复杂性不断增加,这使得逻辑引擎和规则引擎在处理业务需求时显得尤为重要。逻辑引擎和规则引擎通过定义、解析和管理业务逻辑和规则,能够帮助企业提高工作效率、降低运营成本,并增强决策的科学性和准确性。本文将详细解释JVS逻辑引擎调用规则引擎的......
  • 服务调用链路的上下游鉴定
    背景参考文章在涉及多个服务之间的调用,怎么判定那个服务是上游,那个服务又是下游了。判断标准1.如果是从请求的角度去看,那么客户端是服务端的上游,服务端是客户端的下游;2.如果是从返回数据的角度来看,那么数据是从服务端返回给了客户端,因此服务端是客户端的上游,客户端是服务端的......
  • 彻底改变你的代码:JavaScript linter—Oxlint
    作为开发人员,总是在寻找能够简化工作流程并提高工作效率的工具。Oxlint是一个用Rust编写的JavaScriptlinter,现在提供了可以替代ESLint的新方案,其性能比ESLint提升了50-100倍。在本文中,将学习如何将Oxlint集成到开发流程中,充分利用其速度和效率。了解OxlintOxc(TheO......
  • WebSocket与JavaScript:实现实时地理位置定位系统的关键技术
    Laravel是一个流行的PHP框架,它具有出色的可测试性,可以帮助开发人员在更短的时间内编写可靠的代码。但是,即使使用了这个框架,也可能会出现测试覆盖率较低的情况。测试覆盖率是指代码中已由测试案例覆盖的部分比例。测试覆盖率越高,代码质量越高。在本文中,我们将分享几种技巧,帮助您提......
  • PDF数字签名信息获取(Java)
    利用Java代码,读取PDF内的签名信息,包括签发单位、Thumbprint、签发时间等信息。此处使用了Spire.PDF的相关依赖,Maven项目可使用以下方式引入,或者直接导入相关jar包即可。<repositories><repository><id>com.e-iceblue</id><name>e-iceblue</name>......
  • 如何使用WebSocket和JavaScript实现在线人脸识别系统
    Laravel是一个流行的PHP框架,它具有出色的可测试性,可以帮助开发人员在更短的时间内编写可靠的代码。但是,即使使用了这个框架,也可能会出现测试覆盖率较低的情况。测试覆盖率是指代码中已由测试案例覆盖的部分比例。测试覆盖率越高,代码质量越高。在本文中,我们将分享几种技巧,帮助您提......
  • 掌握Java Future模式及其灵活应用
    第1章:引言大家好,我是小黑,今天咱们来聊聊Future。咱们程序员在日常工作中,肯定都遇到过需要处理耗时任务的情况,特别是在Java领域。比如说,小黑要从网络上下载数据,或者要执行一个计算密集型任务,这些操作都可能需要花费一些时间。在这种场景下,如果小黑还要保持程序的响应性,就得用到异......
  • 优雅处理并发:Java CompletableFuture最佳实践
    第1章:引言大家好,我是小黑,今天,小黑要和大家聊聊CompletableFuture,这个Java8引入的强大工具。在Java传统的Future模式里,咱们都知道,一旦开始了一个异步操作,就只能等它结束,无法知道执行情况,也不能手动完成或者取消。而CompletableFuture呢,就像它的名字一样,是可以"完全控制"的Futur......