добавление банок в вашу программу - PullRequest
0 голосов
/ 07 июня 2009

У меня есть простой файл 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: Демо

Путь к классу: C: \ Program Files \ MySQL \ MySQL Tools for 5.0 \ java \ lib \ mysql-connector-java-5.0.4-bin.jar

когда я создаю файл jar из того же каталога, используя

jar -cvfm Demo.jar manifest.txt .class

следующий вывод:

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

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

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

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

Main-Class: Демо

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

Ответы [ 3 ]

1 голос
/ 07 июня 2009

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

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

Class-Path:

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

0 голосов
/ 07 июня 2009

Не следует полагаться на путь к классам манифеста, так как в файлах манифеста есть несколько странных правил , включая правила переноса строк.

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

0 голосов
/ 07 июня 2009

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

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

...