有次在eclipse中运行发布于Tomcat中的项目,一切正常,但在停止Tomcat服务(Stop the server)时报错了,由于当时比较着急,没仔细看是什么错误,就匆匆忙忙地把eclipse关掉了。结果就如标题所描述的那样:运行eclipse后选择原来的工作空间后,在加载工作空间(loading workbench)时,进度条走了一小段就闪退了。刚开始以为是偶然情况,之后再次打开eclipse、重启电脑后再次打开eclipse都还是一样的情况!无奈,由于是在加载工作空间时闪退,就去工作空间下看了下日志(<workbench>\.metadata\.log),结果发现了这样的记录:

!ENTRY org.eclipse.core.resources 2 10035 2014-05-28 22:25:27.998
!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes.

!ENTRY org.eclipse.core.jobs 2 2 2014-05-28 22:25:33.603
!MESSAGE Job found still running after platform shutdown.  Jobs should be canceled by the plugin that scheduled them during shutdown: org.eclipse.ui.internal.Workbench$55

从意思上看:第一条说工作空间里存在未保存的改变;第二条说在平台(eclipse?Tomcat?)关闭后工作(这个工作不知是指什么,是指我之前运行的项目?)还在运行。

  找到问题了,下面就只有问谷哥(个人感觉比度娘更能准确的找到答案)!我把第一个问题“

The workspace exited with unsaved changes in the previous session

”放谷哥上搜,找到以下个人认为有用的答案:

 1、换个工作空间,重新导入项目。呃… 那我辛辛苦苦更改的eclipse配置不得重新配置!pass

 2、把"<workbench>\.metadata\.plugins\org.eclipse.core.resources\.snap"删掉就好了,但启动eclipse后要重新导入项目。有点麻烦,(也有没重新导项目的,参见http://www.cnblogs.com/yjmyzz/p/3588265.html,未测试)!pass

 3、把"<workbench>\.metadata\.plugins\org.eclipse.core.resources\.projects"下的相应项目(导致出错的项目,即上一次运行过的项目)目录下的".snap"删掉就可以了,不用重新导入项目。这个感觉靠谱,不影响其他项目。试试看,但没找到".snap"文件,倒是有".markers.snap"和".syncinfo.snap"。算了,死马当活马医吧,就把".markers.snap"和".syncinfo.snap"删掉。启动eclipse,还是闪退。继续看日志,只剩下第二条记录,说明第一条记录的问题已经解决了。

  接下来当然还是谷哥,搜“

Job found still running after platform shutdown

”,这次的解决方案比较一致,就是把"<workbench>/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi"文件删掉。我就照做了,结果果然可以启动eclipse了,只是原先修改过的eclipse界面布局恢复成默认的了,看了下preference配置,还好都在,不然又要花上半个小时重新配置。解决方法参见http://stackoverflow.com/questions/11310970/eclipse-juno-doesnt-start/12045547#12045547

  由于好奇,就把之前删除的".markers.snap"和".syncinfo.snap"又还原了,启动eclipse……

突然间有种想说“次哦”的感脚:我前面费得什么劲儿啊,直接把这个删了不就得了!

  问题解决了,感觉轻松多了。但很疑惑,就有editplus打开删掉了的"workbench.xmi"看了看,看到了有"persistedState"标签,里面有很长很长的字符才到标签结束。搜索了下项目名(导致eclipse闪退的项目),全在这个"persistedState"标签中,而且还有一堆的项目中的请求路径。突然间想起曾见过有用命令行"eclipse -clean persistedState"解决该问题的方案,但我个人对命令行有中莫名的恐惧:它太强大了!刚开始没敢试!但现在问题已经决解了,而且也好奇于是否真能解决问题,就把删除了的"workbench.xmi"文件还原,覆盖已存在(启动eclipse后新生成的)的。启动eclipse,闪退!启动cmd,进入eclipse根目录,运行"eclipse -clean persistedState",eclipse启动界面弹出,等了片刻,弹出工作空间选择对话框,选好后继续,loading workbench… OK!成功启动了!看样子这个问题好像是"persistedState"导致的。随即又打开了"workbench.xmi",看了下"persistedState"标签,很简短就结束了,没有了之前关于项目的相关内容。

  反观下来,这个问题好像是由于项目没有正常关闭运行而导致"workbench.xmi"中的"persistedState"标签还保持在运行时的配置造成的。想了想,还是记录下来吧!以备自己以后回顾用,同时也给他人提供一个解决类似问题的思路。说得很啰嗦,不过个人感觉思路还是挺清晰的,但愿自己以后回顾时还能看得懂!