我有一个jar文件,已经变成一个.exe使用L4J,和另一个jar文件在appdata。有两个文件的原因是我需要更新机制。如何从另一个jar中运行jar文件
我的问题: 如何在桌面上运行.exe文件,然后从appdata中将jar加载到桌面上?
我有一个jar文件,已经变成一个.exe使用L4J,和另一个jar文件在appdata。有两个文件的原因是我需要更新机制。如何从另一个jar中运行jar文件
我的问题: 如何在桌面上运行.exe文件,然后从appdata中将jar加载到桌面上?
你可以使用一个URLClassLoader
加载第二Jar在运行时。
根据您的需要,您可能需要一个桥接接口(一个存在于Jars中的桥接接口),您可以通过'exe'调用第二个Jar来运行......或者您可以简单地使用第二个Jar的main
方法;)
您拥有的另一个选择是运行另一个JVM。
UPDATE
为物理独立的应用程序的两个元素。你有一个JAR包装在一个EXE(又名启动器)和另一个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
方法,你可以用上面的例子只是推出任何类你想...
我不明白你刚才说什么.. O_O – Mad3ngineer
是啊,我也是这样。;) – MadProgrammer
+1很好的解释和存在的CMD/C发射方式太:) – 2012-09-20 23:04:11
你需要在添加一个罐子,通过类路径,为如:“C:\ mypath中\ myjar.jar”比你更新myjar.jar
因此,您将类路径添加到.exe包装jar中的元数据,然后从.exe运行主类,您将加载库的方式,对吧? – Mad3ngineer
是的,每次重新启动后,新的jar是存在的,就像Windows中的.dll文件:) – 2012-09-20 22:13:15
好,谢谢!这真的帮助我! – Mad3ngineer
使用[Java Web Start](http://stackoverflow.com/tags/java-web-start/info)来安装应用程序。自动更新内置免费,它可以在Windows,OS X和* nix上运行。 –
我看了一下web-start。我认为我自己创造的东西可能更具专业性。我需要我自己的更新程序/启动程序的GUI。 – Mad3ngineer
啊。错别字。我会在任何有关此问题的问题中补充一点。我很抱歉没有包括这一点,我认为这不在问题的范围内。我将从现在开始提供更多信息。 – Mad3ngineer