Как запустить jar-ресурс из другого java-приложения - с помощью Solution - PullRequest
0 голосов
/ 21 декабря 2011

РЕДАКТИРОВАНИЕ с решением (ниже ...)

У меня есть заставка, которая упакована в его собственную банку.Это работает.

Я могу вызвать Splash.jar из другого java-приложения с помощью:

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 ]

1 голос
/ 22 декабря 2011

Вы можете создать новый URLClassLoader с помощью Splash.jar, а затем использовать отражения для выполнения основного метода.

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]);
1 голос
/ 21 декабря 2011

Мы не знаем, как работает ваш существующий Splash Screen ...

Поддержка Java AWT для Splash Screen:

Если вы используете встроенный Javaпри поддержке заставок (как указано в SplashScreen Javadoc ), вам необходимо использовать переключатель командной строки или, что еще лучше, изменить файл MANIFEST, чтобы он ссылался на экран заставки:

Manifest-Version: 1.0
Main-Class: Test
SplashScreen-Image: filename.gif

Я не знаю, можете ли вы в этом конкретном случае ссылаться на файлы в другом JAR-файле.В худшем случае вы можете распаковать существующий JAR-файл (это всего лишь ZIP-файлы) и получить файл изображения, чтобы включить его в свой основной jar.

Возможно, пользовательский Splash:

Если ваш Splash создан с использованием пользовательского кода, то вам нужна документация о том, как его загрузить.По крайней мере, вам нужно добавить Splash.jar в classpath вашего приложения и из вашего приложения вызвать необходимый метод или загрузить соответствующий ресурс.

Все ресурсы и классы, содержащиеся в файлах .jar, добавленных в classpath , доступны из вашего приложения.

0 голосов
/ 21 декабря 2011

Почему бы не определить Splash.jar как внешний jar-файл и не использовать все его подпрограммы.Очень похоже на JDBC.

0 голосов
/ 21 декабря 2011

добавьте путь к ресурсу в вашу переменную среды CLASSPATH, и вы можете использовать его без изменения существующего кода

, если ваш работающий linux

export CLASSPATH = yourpath;

иесли ваши работающие окна:

в Мой компьютер, щелкните правой кнопкой мыши> свойства

ИЛИ

, если вы не хотите добавлять его в переменную CLASSPATH ENV,

затем

java -classpath = "ваш путь к банке" ваш класс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...