如何使用解决方案从另一个java应用程序内部启动资源jar

如何使用解决方案从另一个java应用程序内部启动资源jar,java,resources,Java,Resources,用解决方案编辑(如下… 我有一个闪屏,它被打包到自己的jar中。它起作用了 我可以通过以下方式从另一个java应用程序内部调用Splash.jar: 打开(新文件(“/Applications/Eclipse/Splash.jar”) 而且效果很好。但是,这是相当有限的。因此,我在新应用程序中创建了一个res文件夹,并将Splash.jar拖到其中 现在,我如何从新应用程序的主类中调用/运行它 我查看了所有相关的帖子,发现没有明确的方法 谢谢 解决方案: package test; impo

用解决方案编辑(如下…

我有一个闪屏,它被打包到自己的jar中。它起作用了

我可以通过以下方式从另一个java应用程序内部调用Splash.jar:

打开(新文件(“/Applications/Eclipse/Splash.jar”)

而且效果很好。但是,这是相当有限的。因此,我在新应用程序中创建了一个res文件夹,并将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();
    }
  }
}
我找到了解决办法——非常简单。首先,要感谢avjava.com提供了清晰而优秀的教程()。因此,现在我可以按预期运行Splash(或other.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();
    }
  }
}

我们不知道你现有的闪屏是如何工作的

Java AWT对启动屏幕的支持:

如果您正在使用Java内置的启动屏幕支持(如中所指定),则需要使用命令行开关,或者更好的是,修改清单文件以引用启动屏幕:

Manifest-Version: 1.0
Main-Class: Test
SplashScreen-Image: filename.gif
我不知道,对于这种特殊情况,您是否可以引用另一个JAR中的文件。在最坏的情况下,您可以解压缩现有的JAR(它们只是ZIP文件)并获取图像文件,以便将其包含在您自己的主JAR中

可能是自定义飞溅:

如果您的Splash是使用自定义代码创建的,那么您需要关于如何加载它的文档。至少,您需要将Splash.jar添加到应用程序的类路径中,并从应用程序调用必要的方法或加载适当的资源


添加到类路径的.jar文件中包含的所有资源和类都可以从您的应用程序中获得。

将资源路径添加到您的类路径环境变量中,您可以在不修改现有代码的情况下使用它

如果您正在运行linux

导出CLASSPATH=yourpath

如果您正在运行的windows:

从我的电脑右键单击>属性

如果不想将其添加到CLASSPATH ENV变量

然后


java-classpath=“your path to jar”yourclass

为什么不将Splash.jar定义为一个外部jar并开始使用它的所有例程呢。很像JDBC。

您可以使用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]);
URL[]URL=newurl[]{newurl(“res/Splash.jar”)};
ClassLoader cl=新的URLClassLoader(URL);
Class clazz=cl.loadClass(“splash.Main”);
方法Method=clazz.getMethod(“main”,String[].class);
调用(null,新字符串[0]);

向系统类路径中添加类似的内容肯定不是一个好主意。我将在这里进行评论,尽管它也适用于其他响应。如果你们中有人通过java教程引起了轰动,您就知道它是用自定义清单打包的,并且通过Eclipse,它是通过导出一个Jar(而不是一个可部署的Jar)来完成的。可部署jar方法不适用于splash(至少对我来说不适用)。所以,我需要按原样使用Splash.jar,不要调用它的任何方法。。。因此,我正在寻找一个对资源的简单调用。如果我把它添加到类路径中,我仍然需要知道如何调用它。。。ThanksWell,如果您在类路径中包含.jar,您可以找到Splash.jar的main()方法的位置,并静态调用它(即
SplashMainClass.main(null)
),但这看起来很奇怪。谢谢。关于splash,它必须与清单和资源一起包含,比如jar中的imgages。否则,它们就不起作用了——请查看java Splash上的无数帖子。它在类路径中,但这还不够。我需要有一种方式来调用它来运行它,就像它是另一个应用程序一样,但现在位于我正在编写的新应用程序的资源文件夹中。我从我的应用程序中的资源文件夹中调用图像并将其用作图标没有问题-似乎我也应该能够简单地调用资源文件夹中的另一个jar并运行它。。。但是,怎么做?也许我不清楚。我在Oracle/Java上构建了一个与Java教程相同的启动屏幕——唯一的区别是图形图像。因此,该项目有一个清单,即列出的SplashScreen图像。我正在使用Eclipse,导出jar有两种方法:1)jar,2)可部署jar。只有第一个应用程序将创建它,使其作为独立应用程序运行。所以,我有一个splashscreen应用程序,我想从一个新的应用程序中通过某种调用来运行它。是的,我可以在一个应用程序中完成这一切,但可以说,我更喜欢将splash作为准可运行插件。怎么做?叫它上课是行不通的。首先,谢谢大家的帮助!在充分考虑之后,看起来最好的方法是:1)从清单中加载一个图像,或2)使用未修饰的JFrame或JWindow。我想我会坚持显式方法。(JWindow需要手工编码,而不是图像/图标友好。因此,我有一个解决方案。再次感谢大家!谢谢。错误:“构造函数URLClassLoader(DocFlavor.URL[])未定义”我在下面为ijmontes添加了可能更清楚的解释/需要注释。我喜欢类加载器的想法,但我不想运行该类,我想运行.jar,就像我将其作为独立应用程序运行一样。似乎您导入了错误的URL类,您需要
java.net.URL
而不是
javax.print.DocFlavor.URL
。如果运行jar java可执行文件不做任何其他事情。它从类路径创建一个类加载器,加载主类并执行主方法。如果运行jar的好处与您自己在java中可以做的相同,那么运行jar有什么好处?谢谢。我将尝试正确的URL类。为什么这样做?好吧,hopin