0

我在D:\jarConcepts目录中有一个简单的 Demo.java 文件:

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) ;
    }
}

我在 D:\jarConcepts 中准备了一个 manifest.txt 文件,其中包含以下文本:

主类:Demo

类路径: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)(deflated 32%)

但是,当我执行生成的 jar 文件时,它会显示一条错误消息,

无法找到主类。程序将会退出。

当我使用以下清单代码创建 jar 文件时,我不明白为什么会发生这种情况:

主类:Demo

我得到了一个完全可执行的 Demo.jar,唯一的问题是它没有从 ] 类路径加载驱动程序类,当我试图在清单中添加路径时,它不起作用......请帮助.......

4

3 回答 3

1

空格被解释为分隔符,并且条目应该是相对的:

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

类路径:

此属性的值指定此应用程序或扩展所需的扩展或库的相对 URL。URL由一个或多个空格分隔

于 2009-06-06T22:20:23.410 回答
0

确保清单文件中 Main-Class 和 Class-Path 条目之间没有换行符。您还应该确保在 Class-Path 条目之后有一个换行符。

另外,如果要用作主类,我会建议 Demo 是一个公共类。

于 2009-06-06T22:02:10.717 回答
0

您不应该依赖清单类路径,因为清单文件有一些非常奇怪的规则,包括用于换行的规则。

相反,使用命令行参数构建类路径并使用主类参数调用您的程序java -cp Demo.jar:mysql-connector.jar Demo

于 2009-06-06T22:05:16.360 回答