Eclipse無法開啟軟體
Eclipse開啟軟體時報錯:
!ENTRYorg.eclipse.e4.ui.workbench 4 0 2018-04-03 18:46:47.188
!MESSAGEFrameworkEvent ERROR
!STACK0
java.lang.NoClassDefFoundError:javax/annotation/PreDestroy
atorg.eclipse.e4.core.internal.di.InjectorImpl.disposed(InjectorImpl.java:450)
atorg.eclipse.e4.core.internal.di.Requestor.disposed(Requestor.java:156)
atorg.eclipse.e4.core.internal.contexts.ContextObjectSupplier$ContextInjectionListener.update(ContextObjectSupplier.java:78)
atorg.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:111)
atorg.eclipse.e4.core.internal.contexts.TrackableComputationExt.handleInvalid(TrackableComputationExt.java:74)
atorg.eclipse.e4.core.internal.contexts.EclipseContext.dispose(EclipseContext.java:178)
atorg.eclipse.e4.core.internal.contexts.osgi.EclipseContextOSGi.dispose(EclipseContextOSGi.java:99)
atorg.eclipse.e4.core.internal.contexts.osgi.EclipseContextOSGi.bundleChanged(EclipseContextOSGi.java:141)
atorg.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:908)
atorg.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
atorg.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
atorg.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:213)
atorg.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:120)
atorg.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:112)
atorg.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:168)
atorg.eclipse.osgi.container.Module.publishEvent(Module.java:476)
atorg.eclipse.osgi.container.Module.doStop(Module.java:634)
atorg.eclipse.osgi.container.Module.stop(Module.java:498)
atorg.eclipse.osgi.container.SystemModule.stop(SystemModule.java:202)
atorg.eclipse.osgi.internal.framework.EquinoxBundle$SystemBundle$EquinoxSystemModule$1.run(EquinoxBundle.java:165)
atjava.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException:javax.annotation.PreDestroy cannot be found byorg.eclipse.e4.core.di_1.6.100.v20170421-1418
atorg.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:433)
atorg.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:395)
atorg.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:387)
atorg.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:150)
atjava.base/java.lang.ClassLoader.loadClass(Unknown Source)
...21 more
上網搜查原因:JDK9版本不匹配,建議更換低版本JDK
網上給出的解決方法:在eclipse的啟動的配置檔案eclipse.ini檔案末尾新增一行:--add-modules=ALL-SYSTEM
但是開啟Eclipse時,依然報錯……
依稀記得,以前自己配的JDK版本是1.8,怎麼回事呢?
在CMD中,輸入Java -version,顯示:java version "9",難道我配錯了???
檢查環境變數:滑鼠右鍵點選“計算機”,依次點選屬性、高階系統設定、環境變數,
變數名:JAVA_HOME
變數值:C:\Program Files\Java\jdk1.8.0_31
變數名:CLASSPATH
變數值:%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
變數名:Path
變數值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;C:\ProgramFiles\Java\jdk1.8.0_31\bin;
Java版本是1.8.0_31,沒錯呀,為啥Java-version,顯示:java version "9"呢?
經高手指點:在CMD中輸入javac -version,顯示:Java -version,顯示:javac 1.8.0_31。看到這裡,似乎明白了點什麼。
解釋:
同時安裝了jdk1.8.0_31和jre9,且PATH變數中,C:\WINDOWS\system32目錄在%JAVA_HOME%\bin之前。在Windows命令列下執行命令時,先從當前目錄搜素,然後按照PATH設定的路徑依次查詢命令,而JRE安裝時會將java.exe安裝到C:\WINDOWS\system32目錄下,所以執行java -version命令時,檢視的是jre的版本,而javac -version時檢視的jdk的版本。
解決方法:
將%JAVA_HOME%\bin加在PATH變數的頭,執行java -version和javac-version,均為1.8.0_31
注:
javac-version得到的是編譯版本
java-version得到的執行版本