关于热加载出错的问题,请指导

刚开始装上eclipse的时候,没有问题,但好象最近eclipse做了一些更新,出现热加载报错的问题,尝试了很多方法还是没有解决,看看其它人有没有这个问题:

环境:

系统:Mac OS High Serria 10.13.1

eclipse:Oxygen.1a Release (4.7.1a)

jfinal:jfinal-3.2-bin.jar

jetty:8.1.8

druid:1.0.23(以前用的1.0.5,出问题后做了很多版本的尝试,发现1.0.23之后的版本直接就起不来)

数据库:sql server 2008 r2


报错信息如下:

正在加载变更 ......
2017-11-30 22:14:15,201 [JFinal-Scanner] INFO  [com.alibaba.druid.pool.DruidDataSource] - {dataSource-1} closed
2017-11-30 22:14:15.908:WARN:oejuc.AbstractLifeCycle:FAILED sx_system: java.lang.NullPointerException
java.lang.NullPointerException
at com.jfinal.config.Routes$Route.processControllerKey(Routes.java:156)
at com.jfinal.config.Routes$Route.<init>(Routes.java:146)
at com.jfinal.config.Routes.add(Routes.java:61)
at com.jfinal.config.Routes.add(Routes.java:71)
at com.dream.app.AppRoute.config(AppRoute.java:32)
at com.jfinal.config.Routes.add(Routes.java:49)
at com.dream.app.AppConfig.configRoute(AppConfig.java:48)
at com.jfinal.core.Config.configJFinal(Config.java:51)
at com.jfinal.core.JFinal.init(JFinal.java:63)
at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:49)
at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:119)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:724)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
at com.jfinal.server.JettyServer$1.onChange(JettyServer.java:137)
at com.jfinal.server.Scanner.compare(Scanner.java:88)
at com.jfinal.server.Scanner.working(Scanner.java:57)
at com.jfinal.server.Scanner.access$000(Scanner.java:31)
at com.jfinal.server.Scanner$1.run(Scanner.java:94)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
2017-11-30 22:14:15.909:WARN:oejw.WebAppContext:Failed startup of context o.e.j.w.WebAppContext{/,file:/Users/huahua/eclipse-workspace/sx_system/WebContent/}
java.lang.NullPointerException
at com.jfinal.config.Routes$Route.processControllerKey(Routes.java:156)
at com.jfinal.config.Routes$Route.<init>(Routes.java:146)
at com.jfinal.config.Routes.add(Routes.java:61)
at com.jfinal.config.Routes.add(Routes.java:71)
at com.dream.app.AppRoute.config(AppRoute.java:32)
at com.jfinal.config.Routes.add(Routes.java:49)
at com.dream.app.AppConfig.configRoute(AppConfig.java:48)
at com.jfinal.core.Config.configJFinal(Config.java:51)
at com.jfinal.core.JFinal.init(JFinal.java:63)
at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:49)
at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:119)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:724)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
at com.jfinal.server.JettyServer$1.onChange(JettyServer.java:137)
at com.jfinal.server.Scanner.compare(Scanner.java:88)
at com.jfinal.server.Scanner.working(Scanner.java:57)
at com.jfinal.server.Scanner.access$000(Scanner.java:31)
at com.jfinal.server.Scanner$1.run(Scanner.java:94)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
2017-11-30 22:14:15.909:WARN:oejuc.AbstractLifeCycle:FAILED o.e.j.w.WebAppContext{/,file:/Users/
java.lang.NullPointerException
at com.jfinal.config.Routes$Route.processControllerKey(Routes.java:156)
at com.jfinal.config.Routes$Route.<init>(Routes.java:146)
at com.jfinal.config.Routes.add(Routes.java:61)
at com.jfinal.config.Routes.add(Routes.java:71)
at com.dream.app.AppRoute.config(AppRoute.java:32)
at com.jfinal.config.Routes.add(Routes.java:49)
at com.dream.app.AppConfig.configRoute(AppConfig.java:48)
at com.jfinal.core.Config.configJFinal(Config.java:51)
at com.jfinal.core.JFinal.init(JFinal.java:63)
at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:49)
at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:119)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:724)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
at com.jfinal.server.JettyServer$1.onChange(JettyServer.java:137)
at com.jfinal.server.Scanner.compare(Scanner.java:88)
at com.jfinal.server.Scanner.working(Scanner.java:57)
at com.jfinal.server.Scanner.access$000(Scanner.java:31)
at com.jfinal.server.Scanner$1.run(Scanner.java:94)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
Error reconfiguring/restarting webapp after change in watched files
2017-11-30 22:14:15,910 [JFinal-Scanner] ERROR [com.jfinal.kit.LogKit] - 
java.lang.NullPointerException
at com.jfinal.config.Routes$Route.processControllerKey(Routes.java:156)
at com.jfinal.config.Routes$Route.<init>(Routes.java:146)
at com.jfinal.config.Routes.add(Routes.java:61)
at com.jfinal.config.Routes.add(Routes.java:71)
at com.dream.app.AppRoute.config(AppRoute.java:32)
at com.jfinal.config.Routes.add(Routes.java:49)
at com.dream.app.AppConfig.configRoute(AppConfig.java:48)
at com.jfinal.core.Config.configJFinal(Config.java:51)
at com.jfinal.core.JFinal.init(JFinal.java:63)
at com.jfinal.core.JFinalFilter.init(JFinalFilter.java:49)
at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:119)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:724)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)
at com.jfinal.server.JettyServer$1.onChange(JettyServer.java:137)
at com.jfinal.server.Scanner.compare(Scanner.java:88)
at com.jfinal.server.Scanner.working(Scanner.java:57)
at com.jfinal.server.Scanner.access$000(Scanner.java:31)
at com.jfinal.server.Scanner$1.run(Scanner.java:94)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)


尝试了很多种方法,都没有解决,因为本身对jfinal也只是了解了皮毛,所以想请大家提供帮助。

对jfinal中的 JettyServer.java 做过如下的改动:

//only need to change classloader when scanIntervalSeconds > 0
webApp.setParentLoaderPriority(true);//增加了这句,这是参考波总的3.3版本修改的,如果不加这句,同样启动时就报错;但波总后来更新时又去掉了
//
changeClassLoader(webApp);//这句话好象以前就有

----------------

其它尝试过的方法有:

使用更高版本的jetty

使用jfinal3.3(最早安装的2.2,出错后,开始更新版本)3.3版本因为错误信息看起来更复杂,所以没有再尝试。至少3.2版本现在能正常启动,程序也可以正常运行;但需要在每次修改java代码后,重启一下。


评论区

三晋一枝花

2017-12-03 19:02

经测试,发现是@clear方法有影响,还在继续测试中

三晋一枝花

2017-12-12 18:02

这个问题目前为止仍然没有解决。

JFinal

2017-12-12 18:08

解决办法在这里:
http://www.jfinal.com/feedback/2429

JFinal

2017-12-12 18:09

此外,你还可以通过使用传统的启动方式来运行项目,不使用 jfinal 整合的 jetty 就可以

三晋一枝花

2017-12-28 12:13

谢谢,我以前没看到你说的这个贴子。现在问题解决了,就是卸载了原来的版本4.7.1a,又重新安装了4.7.0版本,就可以了。
不用jetty也可以,只是觉得麻烦,还是这个方便。

三晋一枝花

2017-12-28 12:16

@JFinal 另外,就是去掉那个后面的参数5,其实是不解决问题的。因为在jfinal中,这个参数如果是0或没有参数,则不热加载。
不知道我说的对不对。

JFinal

2017-12-28 14:50

@三晋一枝花 你说得对,最后一个参数是支持热加载的。 后续的 jfinal 版本会彻底解决这个问题