3

我有一个使用 L4J 转换为 .exe 的 jar 文件,以及 appdata 中的另一个 jar 文件。有两个文件的原因是我需要一个更新机制。

我的问题:如何在桌面上运行 .exe 文件,然后从中加载 appdata 中的 jar?

4

2 回答 2

3

您可以使用 aURLClassLoader在运行时加载第二个 Jar。

根据您的需要,您可能需要一个桥接接口(两个 Jar 中都存在一个),您可以从“exe”调用该接口以运行第二个 Jar……或者您可以简单地使用第二个 Jar 的main方法;)

您的另一个选择是运行另一个 JVM。

更新

为了物理分离应用程序的两个元素。您有一个包装在 EXE(又名启动器)中的 Jar 和另一个作为您的应用程序(又名应用程序)的 Jar(我假设)。

所以。您的启动器应该完全不了解您的应用程序(几乎没有编译时间依赖性)。

不知何故,我们需要从启动器动态加载应用程序。为此,我们需要做一些事情。

我们需要能够将应用程序加载到启动器类加载器上下文中(以便我们可以看到它),并且我们需要能够加载应用程序。

动态类加载

这可以通过使用简单地实现URLClassLoader

URLClassLoader loader = new URLClassLoader(new URL[]{new File("path/to/your/jar/Application.jar").toURI().toURL()});

应用程序加载

这可以通过以下两种方式之一来实现。您可以简单地使用URLClassLoader来查找启动应用程序main类...

// This is essentially the same as saying 
// the.package.name.to.you.main.class.Main.main(new String[]{});
Class<?> mainClass = loader.loadClass("the.package.name.to.you.main.class.Main");
Method mainMethod = mainClass.getMethod("main", String[].class);
mainMethod.invoke(null, new String[]{});

现在,如果您的应用程序 Jar 没有main方法,您可以使用上面的示例来启动您想要的任何类...

于 2012-09-20T20:30:58.460 回答
1

您需要通过 at 添加一个 jar 到类路径,例如:“c:\mypath\myjar.jar”,而不是更新 myjar.jar

于 2012-09-20T20:28:46.300 回答