目录
bug:Exception in thread "main" java.lang.NoClassDefFoundErro
bug:Exception in thread "main" java.lang.NoClassDefFoundErro
工程内部调用swingx包,工程按照正常export流程导出jar包后,在命令行中运行
java -jar destination.jar
报错:Exception in thread "main" java.lang.NoClassDefFoundError: org/jdesktop/swingx/JXPanel
BugCracking
这个错误是由于导出的jar包没有找到工程引入的第三方jar包导致的。
注意要把当前工程导出成jar包,该工程还依赖其他第三方jar包时,要自定义文件MANIFEST.MF。
在项目下建立文件MANIFEST.MF,内容如下:
Manifest-Version: 1.0
Class-Path: lib/swingx-all-1.6.5.jar lib/commons-codec.jar
Main-Class: ui.HelloLabel
其中第一行表示了Manifest的版本;第二行则指定了第三方jar包的位置,如果引入多个第三方jar包,则要以空格作为间隔;第三行是java项目的main函数所在文件。
注意:
1、Menifest-Version、Class-Path、Main-Class的冒号后面要加空格,才能继续写相应的内容
2、jar包导出后要在jar包的同级目录下建立lib文件夹(lib文件夹和jar包在一个目录下),里面是工程引用的第三方jar包,这里第三方jar包位置放错了,会报“Exception in thread "main" java.lang.NoClassDefFoundError”的错误。
3、Main-Class 后面是类的全地址,package name.classname,注意不要加".java"后缀,否则会报“找不到或无法加载主类”的错误
4、Main-Class一行编辑完了一定要加空格,让光标到下一行
如最后jar包导出为imageEstimate.jar,lib文件夹里为第三方jar包,因为java工程中还调用了一个python文件,所以将python文件也放在同级目录下,不然也会报错。
java工程中调用python文件部分:
filepath是要传入newComplexEstimate.py的参数,System.getProperty("user.dir")获取程序当前路径,“System.getProperty("user.dir") + "/newComplexEstimate.py"即为被调用python文件的地址。
打包jar包
弄清楚原因之后就可以重新打包jar包了。
项目右击->export->java->jar file
点击next
点击next->选择using existing manifest from workspace 并选择自定义建立的manifest file
点击finish即可。
调用jar包
命令行进入jar包所在目录,输入一下命令即可。
java -jar imageEstimate.jar