2009-06-06 2 views
0

У меня есть простой файл Demo.java в D: \ jarConcepts каталога:добавления банки к вашей программе

import javax.swing.* ; 

class Demo{ 
    public static void main(String args[]){ 
     JFrame frame = new JFrame("") ; 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) ; 

     Class c = null ; 
     try{ 
      c = Class.forName("com.mysql.jdbc.Driver") ; 

      //com.mysql.jdbc.Driver class is in a jar file 
      //whose class path is set in the environment variable(explicitly done by me) 

      //when i am executing Demo.class using java command, it displays frame with OK title 
      //but if i execute this by creating a jar, it enables to load the 
      //com.mysql.jdbc.Driver class, 
      //thus displaying frame with Sorry title 

      frame.setTitle("OK") ; 
     } 
     catch(ClassNotFoundException cnfe){ 
      frame.setTitle("Sorry") ; 
     } 

     frame.setVisible(true) ; 
    } 
} 

Я подготовил manifest.txt файл D: \ jarConcepts с текстом следующего содержания:

Main-Class: Demo

Class-Path: C: \ Program Files \ MySQL \ MySQL Инструменты для 5.0 \ Java \ Lib \ MySQL-разъем-Java-5.0.4-bin.jar

, когда я создать банку файл из той же директории, используя

баночку -cvfm Demo.jar manifest.txt .class

Ниже приведен результат:

добавлен манифест добавления : Demo.class (in = 743) (out = 505) (отклонено 32%)

Но, когда я выполняю созданный файл jar, отображается сообщение об ошибке

Не удалось найти основной класс. Программа будет закрыта.

я не понимаю, почему это происходит, сог, когда я создание .jar файл со следующим кодом: манифест

Main-Class: Demo

я получаю совершенно исполняемый Demo.jar, единственная проблема заключается в том, что он не загружает класс драйвера из пути] , и когда я пытаюсь добавить путь в манифест, он не работает ...... plz help ... ....

ответ

0

Убедитесь, что в файле манифеста нет строки новой строки между записью Main-Class и Class-Path. Вы также должны убедиться, что после записи Class-Path есть новая строка.

Также я бы рекомендовал, чтобы Demo был публичным классом, если он должен использоваться в качестве основного класса.

+0

тогда почему файл банк выполняется, когда я только с помощью тегу Main-Class вместо того, чтобы использовать как Main-Class, тег Class-Path ...... – mogli

0

Вы не должны полагаться на путь класса manifest, так как в файлах манифеста есть довольно strange rules, в том числе для переноса строк.

Вместо этого построить путь к классам, используя аргументы командной строки и вызвать программу с помощью основного класса аргумент java -cp Demo.jar:mysql-connector.jar Demo

+0

это длинный список для различных целей .... will u plz скажите мне единственный текст, который мне нужно написать в manifest.txt , чтобы сделать мой кадр видимым с заголовком OK .... – mogli

+0

Как я уже сказал, я могу предложить только построить путь к классам с помощью java -cp ', а не с манифестом. –

+0

mr. robert, thnx для вашего ответа ..... У меня есть еще один вопрос к u, Я новичок на этом сайте. will u plz сообщите мне об использовании ссылки (слева от ссылки на флагом) на этой странице ... ??? – mogli

1

Пространства интерпретируются как разделители и элементы должны быть относительными:

http://java.sun.com/j2se/1.5.0/docs/guide/jar/jar.html#Main%20Attributes

Класс-путь:

Значение этого атрибута указывает относительные URL-адреса из расширения или библиотеки, которые это приложения или расширения. Ссылки являются разделены одним или несколькими лицами.

+0

так что url я должен дать, если мой jar находится в C: \ Program Files \ MySQL \ MySQL Tools для 5.0 \ java \ lib \ mysql-connector-java-5.0.4-bin.jar directory .... – mogli

+0

Вы должны скопировать банку в местоположение относительно вашей банки (например, lib/mysql-connector-java-5.0.4-bin.jar) - теоретически вам нужно будет сделать что-то подобное при создании своего пакета развертывания для ваше приложение. В крайнем случае вы также можете попробовать «файл: /// C: /Program%20Files/MySQL/CMySQL%20Tools%20for%205.0/java/lib/mysql-connector-java-5.0.4-bin.jar». –

+0

Мысль об упаковке - я использовал муравья, чтобы объединить банки с зависимостями в мою банку (отменяя баны и баны зависимости и все вместе). Я думаю, что Sun действительно сбросил мяч, не улучшив поддержку встраивания банок зависимости с помощью приложения. Однако использование пользовательского загрузчика классов кажется менее взломанным: http://www.ibm.com/developerworks/library/j-onejar/ –

Смежные вопросы