След: Развертывание
Урок: Упаковка Программ в Файлах JAR
Раздел: Используя связанные с JAR API
Класс JarRunner
Домашняя страница > Развертывание > Упаковка Программ в Файлах JAR

Класс JarRunner

Приложение JarRunner запускается с командой этой формы:

java JarRunner url [arguments]

В предыдущем разделе мы видели, как JarClassLoader в состоянии идентифицировать и загрузить основной class связанного JAR приложения от данного URL. Чтобы завершить приложение JarRunner, поэтому, мы должны быть в состоянии взять URL и любые параметры от командной строки, и передать их к экземпляру JarClassLoader. Эти задачи принадлежат JarRunner class, точка входа приложения JarRunner.

Это начинается, создавая объект java.net.URL из URL, определенного на командной строке:

public static void main(String[] args) {
    if (args.length < 1) {
        usage();
    }
    URL url = null;
    try {
        url = new URL(args[0]);
    } catch (MalformedURLException e) {
        fatal("Invalid URL: " + args[0]);
    }

Если   args.length < 1, который не означает URL, был определен на командной строке, таким образом, сообщение использования печатается. Если первым параметром командной строки является хороший URL, новый объект URL создается, чтобы представить его.

Затем, JarRunner создает новый экземпляр JarClassLoader, передавая конструктору URL, который был определен на командной строке:

JarClassLoader cl = new JarClassLoader(url);

Как мы видели в предыдущем разделе, именно через JarClassLoader, JarRunner наслаждается обрабатывающие JAR API.

URL это передают конструктору JarClassLoader, является URL связанного JAR приложения, которое Вы хотите запустить. JarRunner следующие вызовы метод getMainClassName загрузчика class, чтобы идентифицировать точку входа class для приложения:

String name = null;
try {
    name = cl.getMainClassName();
} catch (IOException e) {
    System.err.println("I/O error while loading JAR file:");
    e.printStackTrace();
    System.exit(1);
}
if (name == null) {
    fatal("Specified jar file does not contain a 'Main-Class'" +
          " manifest attribute");
}

Ключевой оператор выделяется полужирным. Другие операторы для обработки ошибок.

Как только JarRunner идентифицировал точку входа приложения class, только два шага остаются: передача любых параметров приложению и фактически запущению приложения. JarRunner выполняет эти шаги с этим кодом:

// Get arguments for the application
String[] newArgs = new String[args.length - 1];
System.arraycopy(args, 1, newArgs, 0, newArgs.length);
// Invoke application's main class
try {
    cl.invokeClass(name, newArgs);
} catch (ClassNotFoundException e) {
    fatal("Class not found: " + name);
} catch (NoSuchMethodException e) {
    fatal("Class does not define a 'main' method: " + name);
} catch (InvocationTargetException e) {
    e.getTargetException().printStackTrace();
    System.exit(1);
}

Вспомните, что первым параметром командной строки был URL связанного JAR приложения. Любые параметры, которые передадут к тому приложению, находятся поэтому в элементе 1 и вне в массиве args. JarRunner берет те элементы, и создает новый массив под названием newArgs, чтобы передать к приложению (полужирная строка выше). JarRunner тогда передает имя class точки входа и новый список параметров к методу invokeClass JarClassLoader. Как мы видели в предыдущем разделе, invokeClass загрузит точку входа приложения class, передаст его любые параметры, и запустит приложение.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Класс JarClassLoader
Следующая страница: Вопросы и Упражнения: JAR



Spec-Zone.ru - all specs in one place