如何从另一个Java应用程序中启动资源jar - 使用Solution

时间:2011-12-21 17:07:51

标签: java resources

使用解决方案编辑(下方......)

我有一个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();
    }
  }
}

4 个答案:

答案 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。