1. 程式人生 > >Eclipse無法開啟軟體

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_31jre9,且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 -versionjavac-version,均為1.8.0_31

注:

javac-version得到的是編譯版本

java-version得到的執行版本