Eclipse打不開,始終報錯,還能不能開心的敲代碼了???
首先說下造成我這個愚蠢錯誤的起源:電腦是win10系統,本來是可以正常使用的。某一天,我正在使用python,打開命令提示符,看見開頭是中文(現在成了下面這個樣了),出於強迫症。我就上網去找處理方法。在知乎某篇回答,我找到注冊表,修改了計算機\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-34987087-1338907778-1883452047-1001的中文名。接着重啟電腦,結果發現桌面上以前的偏好設置完全不見了,進入命令提示符下,確實變成了英文,但並不是我設置的那個,而是system32.大失所望,於是我又進入注冊表把ProfileListPath的中文改回來了(下面還多了個文件)。結果就釀成了現在的錯誤。
修改的注冊表位置:

修改后運行命令界面變成這樣了:

好了,當我打開Eclipse時,錯誤接踵而至。

出現上圖錯誤:An error has occurred.See the log file E:\Eclipse Workspace\.metadata\.log。根據提示我找到Eclipse工作空間的.log文件。

用記事本打開.log文件如下:
!SESSION 2018-11-02 08:30:30.122 -----------------------------------------------
eclipse.buildId=4.4.2.M20150204-1700
java.version=10.0.1
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=zh_CN
Framework arguments: -product org.eclipse.epp.package.jee.product
Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.jee.product
!ENTRY org.eclipse.osgi 4 0 2018-11-02 08:30:43.929
!MESSAGE Application error
!STACK 1
java.lang.NoClassDefFoundError: org/w3c/dom/stylesheets/StyleSheet
at org.eclipse.e4.ui.css.swt.internal.theme.ThemeEngineManager.getCSSSWTEngine(ThemeEngineManager.java:41)
at org.eclipse.e4.ui.css.swt.internal.theme.ThemeEngineManager.getEngineForDisplay(ThemeEngineManager.java:30)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createThemeEngine(PartRenderingEngine.java:1428)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.initializeStyling(PartRenderingEngine.java:1281)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1036)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:148)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:636)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:579)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:135)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
at org.eclipse.equinox.launcher.Main.main(Main.java:1438)
Caused by: java.lang.ClassNotFoundException: org.w3c.dom.stylesheets.StyleSheet cannot be found by org.eclipse.e4.ui.css.core_0.10.100.v20140424-2042
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:432)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:345)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:337)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:160)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
... 26 more
接下來,我在Eclipse官網論壇里看到一個留言:
Trimmed javax.xml MANIFEST.MF
With some further discussion on jdk9-dev: the problems when using the app class loader seem to come from the situation that part of the org.w3c class files come from the javax.xml bundle.
So, I did a small experiment: remove all .class files from the javax.xml bundle, but leave the exports information. My assumption here was that that should then "export" the JDK classes.
That didn't quite work: eclipse failed to start because org.w3c.dom.css was unavailable. Adding those classes to the bundle however worked to the effect that Eclipse starts up and seems to be usable.
So, workaround instructions:
$ cd /some/tmp/directory
$ jar xf $ECLIPSE_HOME/plugins/javax.xml_1.3.4.v201005080400.jar
$ rm $ECLIPSE_HOME/plugins/javax.xml_1.3.4.v201005080400.jar
$ jar cvmf whereever/you/downloaded/to/MANIFEST.MF-trimmed $ECLIPSE_HOME/plugins/javax.xml_1.3.4.v201005080400.jar about* license/ org/apache/ plugin.properties org/w3c/dom/css
$ # modify $ECLIPSE_HOME/eclipse.ini and add -Dorg.osgi.framework.bundle.parent=app
而此時的我一臉懵逼。
接下來呀,我換了個1.8.0的Java(較低版本),以前是10.0.1。Eclispe是成功打開了。可惜當彈出提示Java有更新時,我執行會出現如下應用程序錯誤。

點詳細信息如下:

代碼復制出來是這個樣子:
java.lang.IllegalArgumentException: Invalid characters in hostname
at java.net.HostPortrange.toLowerCase(Unknown Source)
at java.net.HostPortrange.<init>(Unknown Source)
at java.net.URLPermission$Authority.<init>(Unknown Source)
at java.net.URLPermission.parseURI(Unknown Source)
at java.net.URLPermission.init(Unknown Source)
at java.net.URLPermission.<init>(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.URLtoSocketPermission(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getHeaderField(Unknown Source)
at java.net.URLConnection.getContentType(Unknown Source)
at com.sun.deploy.net.proxy.AbstractAutoProxyHandler.isSupportedINSFile(Unknown Source)
at com.sun.deploy.net.proxy.AbstractAutoProxyHandler.retrieveContentOfPACFile(Unknown Source)
at com.sun.deploy.net.proxy.AbstractAutoProxyHandler.contructLegacyPACScript_16(Unknown Source)
at com.sun.deploy.net.proxy.AbstractAutoProxyHandler.init(Unknown Source)
at com.sun.deploy.net.proxy.SunAutoProxyHandler.init(Unknown Source)
at com.sun.deploy.net.proxy.DynamicProxyManager.reset(Unknown Source)
at com.sun.deploy.net.proxy.DeployProxySelector.reset(Unknown Source)
at com.sun.javaws.Main.initializeExecutionEnvironment(Unknown Source)
at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
at com.sun.javaws.Main.access$000(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
而且當我導入以前的Java工程文件后,運行程序時出現如下錯誤:


控制台Console錯誤提示如下:
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/array/Demo1 has been compiled by a more recent version of the Java Runtime (class file version 54.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
不過驚喜的是,我新建一個Java工程文件,運行了一個Demo,發現可以運行了。我把兩個工程文件對比了一下,發現兩個工程JRE System Library不同:

