我在程序中使用了两个jar 包, 然后MANIFEST.MF 文件时这样写的:
Manifest-Version: 1.0
Main-Class: com.sqlite.browser.view.MainFrame
Class-Path: ./forms-1.1.0.jar ./sqlitejdbc.jar这两个jar 文件放在了打出来的jar 文件同级目录下, 但是运行的时候, 报异常:
java.lang.NoClassDefFoundError: com/jgoodies/forms/layout/FormLayout
at com.sqlite.browser.panel.DataBaseStructurePanel.<init>(DataBaseStructurePanel.java:60)
at com.sqlite.browser.view.MainFrame.createContents(MainFrame.java:157)
at com.sqlite.browser.view.MainFrame.<init>(MainFrame.java:86)
at com.sqlite.browser.view.MainFrame$1.run(MainFrame.java:72)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.jgoodies.forms.layout.FormLayout
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
... 12 more请问是我的MANIFEST.MF 文件写的问题吗? 一般这样打包, 要用到的jar 包应该如何处理?

解决方案 »

  1.   

    Class-Path: ./forms-1.1.0.jar ./sqlitejdbc.jar 
    改成
    Class-Path: forms-1.1.0.jar sqlitejdbc.jar 
    试试
      

  2.   

    我是这样干的,直接把其他jar的内容全部整成一个jar包。哈哈,winrar直接拖放就OK.
      

  3.   

    2楼真是高, 太好使了, 不过我还是想知道一下配置Class-Path 的规则, 呵呵
      

  4.   

    --------------------以下内容摘自互联网------------实际上,清单文件中还有一个重要的,就是Class-Path,大家一看就知道这个是用来干什么的了.不错,这个就是程序运行的支持库的路径.后来上网查了一下,MANIFEST.MF的具体解释是这样:
          打包清单.它是打包的关键性文件,主要是设置执行入口类和支持库的路径,在运行java应用程序时要根据此文件中给出的信息来查找入口类和支持库.
          我们以前只注意了MANIFEST.MF中的入口类,也就是我们常说的主类(有main方法的类),却忽视了支持库.
          Class-Path:指定支持库的路径,"."指程序运行目录,即到处的jar包所在目录.程序运行时依据Class-Path项的设置路径来查找支持库.每一个支持库之间用空格格开.
         后来我自己用到的jar,放一个文件夹lib,lib就放在和jar包一个文件夹下,清单文件这样写
     Manifest-Version: 1.0
     Main-Class: awt.MyGuiImp
     Class-Path: ./lib/jacob.jar ./lib/jdom.jar ./lib/log4j.jar
        移到别的计算机,运行jar,就不会出现任何问题了,前提是该计算机必须装jdk.