请教:项目在eclipse上可以运行,打包成jar这个报错!java.lang.NoClassDefFoundError,一个javaFX桌面项目。

红楼终究一场梦 2020-08-07 01:01:01

问题
首先:和 freemarker/template/TemplateNotFoundException关系应该不大,因为把 1180行注释掉,1378行也会报错。

1378行报错
Exception in thread "JavaFX Application Thread" java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Workbook
at com.eye_1.java.Index$17.handle(Index.java:1378)
at com.eye_1.java.Index$17.handle(Index.java:1)

1180行报错

Exception in thread "JavaFX Application Thread" java.lang.NoClassDefFoundError: freemarker/template/TemplateNotFoundException
at com.eye_1.java.Index$17.handle(Index.java:1180)
at com.eye_1.java.Index$17.handle(Index.java:1)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8411)
at javafx.scene.control.Button.fire(Button.java:185)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:432)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:410)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$3(WinApplication.java:177)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: freemarker.template.TemplateNotFoundException
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 49 more


...全文
1826 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
八爻老骥 2020-08-07
  • 打赏
  • 举报
回复
你打包后的目录结构是什么样的?同目录下有没有包含freemarker.jar这个包?或是java参数里有没有指定Freemarker的路径?
  • 打赏
  • 举报
回复
感谢楼上二位的指点,确实是jar包问题。方向比努力重要,知道了错误方向,然后搜了一下,找打了一篇文章,解决了问题。 https://blog.csdn.net/erhei0317/article/details/64935642 将Java工程打成jar包,但第三方jar包并没有包含在包中,当在命令行中运行jar包时,出现类找不到的异常, 解决办法1: 将第三方jar包放到JRE的扩展类文件夹中(%JAVA_HOME%/jre/lib/ext), 解决方法2: 修改jar包的MANIFEST.MF文件 详细如下: 通过不断地试验,终于成功了! 1、新建文件夹test位于D盘; 2、将用到的所有第三方jar包放在文件夹lib下,再将lib放在test下; 3、导出的java工程jar包a.jar也放在test下; 4、修改工程jar包META-INF文件夹下的MANIFEST.MF配置文件:

 Manifest-Version: 1.0
 Main-Class: cn.golaxy.yqpt.client.main.GatherMain
 Class-Path: lib/soapmonitor-1.5.jar
   lib/spring-aop.jar
写明main函数的包路径(注意:冒号后加一个空格)! 在class-path后写上引用到的所有jar包(注意:要分行写,并不是说一行写一个jar包,只要保证这一行不要太长就好,否则会出现Exception in thread "main" java.io.IOException: line too long 异常,换行时前面加两个空格,最后还有一个回车)! 5、将修改好的MANIFEST.MF文件覆盖掉原来的; 6、在命令行下执行jar包:java -jar a.jar。
qybao 2020-08-07
  • 打赏
  • 举报
回复
也就是说依赖包没有打包,那就是classpath的问题 你试试用-cp参数指定路径启动试试 java -cp 你的lib路径 -jar name.jar
  • 打赏
  • 举报
回复
引用 2 楼 qybao 的回复:
打包jar后怎么运行的?如果需要的依赖包没有一起打包进jar,那你的classpath环境变量要指定依赖包所在的路径才可以
在cmd里通过 java -jar name.jar 运行的。 我也感觉是程序找不到依赖包,这个要怎么打包,我用的是eclipse的自带打包工具。
  • 打赏
  • 举报
回复
引用 2 楼 qybao 的回复:
打包jar后怎么运行的?如果需要的依赖包没有一起打包进jar,那你的classpath环境变量要指定依赖包所在的路径才可以
你好目录是这样的,java参数里有没有指定Freemarker的路径?这个指的是怎么指定,我用的是eclipse自带的打包工具。
qybao 2020-08-07
  • 打赏
  • 举报
回复
打包jar后怎么运行的?如果需要的依赖包没有一起打包进jar,那你的classpath环境变量要指定依赖包所在的路径才可以

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧