gpt4 book ai didi

java - 导出时从另一个 Jar 运行一个 Jar 不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 06:22:15 25 4
gpt4 key购买 nike

我已经阅读这个主题几个小时了:

我想要做的(并且成功做到的)是从我的代码运行一个可运行的 jar,问题是,当我将代码导出到一个可运行的 jar 中时,它就会停止工作。

在我的编译器中有效的方法是:

ProcessBuilder pb = new ProcessBuilder("java", "-jar", "JAR I'M LOADING");
pb.start

这是我尝试过的:

我已经创建了一个包含我想要运行的 jar 的数据包,并且我创建了一个静态 JarLoader 类:

public class JarLoader {

static JarLoader jl = new JarLoader();

public static ProcessBuilder loadJar(){
return new ProcessBuilder("java", "-jar", jl.getClass().getResource("JAR I'M TRYING TO LOAD").toString());

}

当然,我将运行 jar 的方法切换为:

ProcessBuilder pb = JarLoader.loadJar();
pb.start();

此技术对于其他类型的资源(例如图像)非常有效,但不适用于 jar。

我错过了什么吗? (是的,我确实将包含 Jar 和 JarLoader 的文件夹添加到项目的源代码中)

最佳答案

您当前使用的技术允许您获取已打包在 JAR 文件中的资源。但这些资源仅在应用程序内部是一致的,而不是在应用程序外部。

当您使用 java -jar ... 执行 JAR 文件时,这是正在执行的外部应用程序,并且它不会理解如何从另一个 JAR 内部检索 JAR。您需要将其临时写入磁盘,然后运行临时 JAR 文件。

您需要:

  1. 以流的形式打开资源。
  2. 使用Files.createTempFile()在某处创建临时 JAR 文件。
  3. 使用Files.copy()从资源流复制到临时文件。
  4. 使用File.deleteOnExit()确保主(主机)应用程序终止时临时文件将被清理。
  5. 使用 java -jar tempfile.jar 或您所调用的任何名称来执行临时文件。

关于java - 导出时从另一个 Jar 运行一个 Jar 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27285246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com