使用解决方案编辑(下方......)
我有一个Splash屏幕,它被打包到它自己的jar中。它有效。
我可以通过以下方式从另一个Java应用程序中调用Splash.jar:
Desktop.getDesktop()。open(新文件(“/ Applications / Eclipse / Splash.jar”));
它工作得很好。但是,这非常有限。因此,我在新应用程序中创建了一个res文件夹,并将Splash.jar拖入其中。
现在,我如何调用它/从新应用程序的主类中运行它?
我查看了所有相关帖子,看不出明确的方法......
由于
解决方案:
我找到了解决方案 - 这么简单。首先,感谢avjava.com提供了明确而优秀的教程(Run Another Jar from a Jar)。所以,现在我可以按照希望运行Splash(或其他.jar)。
答案就在这里 - 以完整代码的形式发布:
package test;
import java.io.IOException;
public class RuntimeExecTest1 {
public static void main(String[] args) {
try {
System.out.println("TextEdit I hope");
Runtime runTime = Runtime.getRuntime();
Process process = runTime.exec(
"java -jar /your directory/your app.jar");
try {
Thread.sleep(5000); // keep in open 5000ms
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Closing TextEdit, I hope");
process.destroy(); // kill the process of running the .jar
} catch (IOException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:1)
我们不知道你现有的Splash Screen是如何工作的......
支持Splash Screen的Java AWT:
如果您使用Java内置支持初始屏幕(在SplashScreen Javadoc中指定),那么您需要使用命令行开关,或者更好的是,修改您的MANIFEST文件以引用您的Splash屏幕:
Manifest-Version: 1.0
Main-Class: Test
SplashScreen-Image: filename.gif
我不知道,对于这种特殊情况,您是否可以引用不同JAR中的文件。在最坏的情况下,您可以解压缩现有的JAR(它们只是ZIP文件)并获取图像文件,以便将其包含在您自己的主jar中。
可能是自定义Splash:
如果你的Splash是使用自定义代码创建的,那么你需要有关如何加载它的文档。至少,您需要将Splash.jar添加到应用程序的 classpath ,并从您的应用程序调用必要的方法或加载适当的资源。
添加到类路径的.jar文件中包含的所有资源和类都可以从您的应用中获得。
答案 1 :(得分:1)
您可以使用Splash.jar创建一个新的URLClassLoader
,然后使用反射执行main方法。
URL[] urls = new URL[] { new URL("res/Splash.jar") };
ClassLoader cl = new URLClassLoader(urls);
Class<?> clazz = cl.loadClass("splash.Main");
Method method = clazz.getMethod("main", String[].class);
method.invoke(null, new String[0]);
答案 2 :(得分:0)
将资源路径添加到CLASSPATH envoirment变量中,您可以在不修改现有代码的情况下使用它
如果你正在运行linux
export CLASSPATH = yourpath;
如果你正在运行的窗口:
从“我的电脑”右键单击&gt;特性
OR
如果您不想将其添加到CLASSPATH ENV变量
然后
java -classpath =“你的jar路径”你的类
答案 3 :(得分:0)
为什么不将Splash.jar定义为外部jar并继续使用它的所有例程。很像JDBC。