.
.
.
.
.
很久沒有寫博客了,最近實在是太忙,一直想寫點干貨,但是一直沒靜下心來學習。
今天又在加班忙碌之中,結果誰知道越忙碌越出問題。先是 weblogic 沒有正常啟動,憑經驗第一反應就是7001端口被其它程序占用了,然后通過命令查看之后,發現果然是被占用了,占用端口的竟然是Eclipse,查找占用端口的方式請移步至博主的另一篇文章《【windows】查詢占用端口的程序——記一次解決webloigc啟動失敗的過程》。
Eclipse之前是不占用7011端口的,這次占用估計可能是啟動了一個隨機端口,恰巧占用了weblogic的web服務端口。既然已經找到了罪魁禍首,那就重啟Eclipse吧。誰知點擊關閉按鈕的時候,沒有彈出確認退出的對話框,而是界面直接就消失了,但是進程卻沒有消失。直覺告訴博主:壞了,可能要出問題。果然不出所料,再次啟動就會彈出提示說遇到了一個問題,具體詳見 workspace/.metadata/.log 文件。博主打開這個日志文件一看,里面報了一個異常:
org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(SWT.java:4397)
at org.eclipse.swt.SWT.error(SWT.java:4312)
at org.eclipse.swt.SWT.error(SWT.java:4283)
at org.eclipse.swt.widgets.Display.error(Display.java:1258)
at org.eclipse.swt.widgets.Display.checkDevice(Display.java:764)
at org.eclipse.swt.widgets.Display.addListener(Display.java:626)
at org.eclipse.ui.internal.ide.application.IDEWorkbenchAdvisor.<init>(IDEWorkbenchAdvisor.java:176)
at org.eclipse.ui.internal.ide.application.IDEWorkbenchAdvisor.<init>(IDEWorkbenchAdvisor.java:184)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:125)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:354)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
這個異常的大概意思就是在非SWT線程中是不允許操作UI組件的,否則就會拋出這個異常。
好吧,一看堆棧信息並不像是某個插件導致的,莫非是 eclipse 4.3 的bug?先不深究了。
說說這個問題是怎么解決的吧。
折騰了很久,博主差點就重裝系統了,后來發現解決辦法很簡單,只需要在Eclipse第一次啟動的時候加上一個 -clean 參數即可,下次再啟動就不用加這個參數了。
再簡單解釋一下這個參數的作用,Eclipse為了加快啟動速度會將插件進行緩存,但是恰巧就是這些緩存有的時候會出問題,所以用 -clean 參數讓 Eclipse 清除掉這些緩存就行了,不過加上這個參數之后 Eclipse 的啟動速度會變慢,好在只需使用一次。