当前位置: 首页 > 面试题库 >

Java-使用Runtime.getRuntime()。exec(无法启动临时文件启动的进程

牛嘉谊
2023-03-14
问题内容

启动的进程Runtime.getRuntime().exec(cmdLine, envp, workingDirectory);无法创建临时文件。

在Eclipse的Maven插件中使用

mvn启动报价:

 Caused by: java.io.IOException: �ܾ���ʡ�
    at java.io.WinNTFileSystem.createFileExclusively(Native Method)
    at java.io.File.createTempFile(File.java:1879)

完整日志

演示代码段遇到相同的错误。

        String mavenPath = "D:\\Progs\\springsource\\apache-maven-3.0.4\\bin\\mvn.bat";
        String mavenOptions  = "-X compile exec:java -Dexec.mainClass=runclass.Runme";

        String[] cmdLine = new String[2];
        cmdLine[0] = mavenPath;  //cmdLine.add(mavenPath);
        cmdLine[1] = mavenOptions;      //cmdLine.add(mavenOptions+" compile exec:java -Dexec.mainClass="+packageClass);

        String[] envp = new String[2];
        //Map<String, String> envm = new HashMap<String, String>();
        envp[0] = "JAVA_HOME=" + System.getProperty("java.home"); //System.getenv("JAVA_HOME");
        envp[1] = "M2_HOME=" + System.getenv("MAVEN_HOME");

        File workingDirectory = null;
        String currentDir = new File(".").getAbsolutePath();
        log(currentDir);
        String userDir = System.getProperty("user.dir"); //User working directory ; "user.home"     User home directory
        workingDirectory = new File(userDir);       
        log(workingDirectory.toString());

        //
        Runtime rt = Runtime.getRuntime();
        Process proc = rt.exec(cmdLine, envp, workingDirectory);
        InputStream stdout = proc.getInputStream();
        InputStream stderr = proc.getErrorStream();
        InputStreamReader isr = new InputStreamReader(stdout);
        InputStreamReader isr2 = new InputStreamReader(stderr);
        BufferedReader br = new BufferedReader(isr);
        BufferedReader br2 = new BufferedReader(isr2);

更新:

传递TMP和TEMP环境变量无济于事。
通过 null而不是envp也无济于事。

如果envp为null,则子进程继承当前进程的环境设置。


问题答案:

通过传递一组环境变量来解决。



 类似资料:
  • 问题内容: 我正在从Java应用程序(Tomcat服务器的一部分,在调试模式下在Win7 64位的Eclipse Helios中运行)中启动wkhtmltopdf:我要等待它完成,然后再做更多工作。 但永远不会回来。我仍然可以在Windows任务管理器中看到该过程(使用我传递给exec()的命令行:看起来不错)。和它的工作原理。wkhtmltopdf生成了我期望的PDF,就在期望的位置。即使进程仍

  • 在配置实例时,我使用“Remote-exec”执行一些命令,然后通过terraform启动一个tomcat实例。它看起来像这样: } 输出显示tomcat已启动,但当我查看实例时,日志显示它尚未启动(没有日志记录)。我可以用ssh连接到实例中并运行“/catalina.sh start”,效果很好。我还尝试创建一个服务,并在远程执行内联命令中运行“sudo service tomee start”

  • 我正试图在设备上启动我的应用程序。它正在模拟器上成功发射。 null null 会不会是带有代码签名的东西? 目前我已将其设置为“不编码签名”

  • 问题内容: 此代码将执行一个外部exe应用程序。 如果我想执行外部Java文件怎么办?可能吗?例如以下命令: 该代码在java和cmd提示符下不起作用。如何解决呢? 问题答案: 首先,您的命令行看起来不正确。执行命令与批处理文件不同,它不会执行一系列命令,而只会执行一个命令。 从外观上看,您正在尝试更改要执行的命令的工作目录。一个更简单的解决方案是使用,它将允许您指定给定命令的起始目录… 例如…

  • 问题内容: 美好的一天! 我创建了jar文件(使用Netbeans),但无法启动。该项目使用lwjgl库。在我的IDE中,它运行良好。 我使用下一个命令: 答案是: 其他项目(没有此库)可以正常工作。我该如何解决这个错误? 我的清单是: 问题答案: 由于您需要将本地文件放在jar旁边,并通过’-Djava.library.path’参数指向它们,因此它无法按照您当前尝试的方式工作。 如果您只想要一

  • 问题内容: 我是Ubuntu的新手,我在Ubuntu 10.04中安装了XAMPP。当我启动XAMPP时,它说MySQL无法启动。 这是我的终端输出: 然后,当我转到时,我陷入了XAMPP初始屏幕,如果选择语言,则什么也不会发生。 问题答案: 我找到了答案。首先完全卸载lampp,然后重新安装。卸载之前,请使用以下命令停止lampp: 然后使用命令卸载/删除它 然后重新安装。