Eclipse/STS报'no more handles'与'JVM terminated. Exit code=127'错误求助
Ubuntu 16.04下Eclipse/STS两类常见问题排查
问题现象
- 右键点击项目时触发
JVM terminated. Exit code=127 - 执行导入项目、添加JRE等需浏览目录的操作时,出现
Unhandled event loop exception及org.eclipse.swt.SWTError: No more handles错误 - Eclipse 2020-12(4.18.0)、Spring Tool Suite 4(4.16.0.RELEASE)等多个版本均出现相同问题
系统环境信息
$ java -version openjdk version "1.8.0_292" OpenJDK Runtime Environment (build 1.8.0_292-8u292-b10-0ubuntu1~16.04.1-b10) OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode) $ javac -version javac 1.8.0_292 $ uname -a Linux mypc 4.15.0-142-generic #146~16.04.1-Ubuntu SMP Tue Apr 13 09:27:15 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
错误日志与启动参数
org.eclipse.swt.SWTError: No more handles 错误栈
eclipse.buildId=4.16.0.202209151144 java.version=17.0.4.1 java.vendor=Eclipse Adoptium BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_IN Framework arguments: -product org.springframework.boot.ide.branding.sts4 Command-line arguments: -os linux -ws gtk -arch x86_64 -product org.springframework.boot.ide.branding.sts4 org.eclipse.ui Error Sun Nov 13 06:47:48 IST 2022 Unhandled event loop exception org.eclipse.swt.SWTError: No more handles at org.eclipse.swt.SWT.error(SWT.java:4944) at org.eclipse.swt.SWT.error(SWT.java:4833) at org.eclipse.swt.SWT.error(SWT.java:4804) at org.eclipse.swt.widgets.Dialog.error(Dialog.java:202) at org.eclipse.swt.widgets.DirectoryDialog.openNativeChooserDialog(DirectoryDialog.java:141) at org.eclipse.swt.widgets.DirectoryDialog.open(DirectoryDialog.java:125) at org.eclipse.m2e.core.ui.internal.wizards.MavenImportWizardPage.lambda$0(MavenImportWizardPage.java:173) at org.eclipse.swt.events.SelectionListener$1.widgetSelected(SelectionListener.java:84) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:252) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5796) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1529) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:5025) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4477) at org.eclipse.jface.window.Window.runEventLoop(Window.java:823) at org.eclipse.jface.window.Window.open(Window.java:799) at org.eclipse.ui.internal.handlers.WizardHandler$Import.executeHandler(WizardHandler.java:153) at org.eclipse.ui.internal.handlers.WizardHandler.execute(WizardHandler.java:283) at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:283) at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:97) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:317) at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:251) at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:173) at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:156) at org.eclipse.core.commands.Command.executeWithChecks(Command.java:488) at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:485) at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:213) at org.eclipse.ui.internal.handlers.LegacyHandlerService.executeCommand(LegacyHandlerService.java:389) at org.eclipse.ui.internal.handlers.LegacyHandlerService.executeCommand(LegacyHandlerService.java:366) at org.eclipse.ui.internal.views.helpers.EmptyWorkspaceHelper$ImportAction.run(EmptyWorkspaceHelper.java:383) at org.eclipse.ui.internal.views.helpers.EmptyWorkspaceHelper$1.linkActivated(EmptyWorkspaceHelper.java:281) at org.eclipse.ui.forms.widgets.AbstractHyperlink.handleActivate(AbstractHyperlink.java:215) at org.eclipse.ui.forms.widgets.AbstractHyperlink.handleMouseUp(AbstractHyperlink.java:309) at org.eclipse.ui.forms.widgets.AbstractHyperlink.lambda$3(AbstractHyperlink.java:117) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5796) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1529) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:5025) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4477) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1155) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:643) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:550) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:171) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:402) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596) at org.eclipse.equinox.launcher.Main.run(Main.java:1467) at org.eclipse.equinox.launcher.Main.main(Main.java:1440)
JVM terminated. Exit code=127 启动参数日志
/home/cipher/Downloads/sts-4.16.0.RELEASE//plugins/org.eclipse.justj.openjdk.hotspot.jre.full.linux.x86_64_17.0.4.v20220903-1038/jre/bin/java --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/sun.security.ssl=ALL-UNNAMED -Dosgi.requiredJavaVersion=11 -Dosgi.dataAreaRequiresExplicitInit=true -Xms256m -Xmx2048m --illegal-access=permit --add-modules=ALL-SYSTEM -jar /home/cipher/Downloads/sts-4.16.0.RELEASE//plugins/org.eclipse.equinox.launcher_1.6.400.v20210924-0641.jar -os linux -ws gtk -arch x86_64 -showsplash -launcher /home/cipher/Downloads/sts-4.16.0.RELEASE/SpringToolSuite4 -name SpringToolSuite4 --launcher.library /home/cipher/Downloads/sts-4.16.0.RELEASE//plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.2.600.v20220720-1916/eclipse_11701.so -startup /home/cipher/Downloads/sts-4.16.0.RELEASE//plugins/org.eclipse.equinox.launcher_1.6.400.v20210924-0641.jar --launcher.overrideVmargs -exitdata 2f8008 -product org.springframework.boot.ide.branding.sts4 -vm /home/cipher/Downloads/sts-4.16.0.RELEASE//plugins/org.eclipse.justj.openjdk.hotspot.jre.full.linux.x86_64_17.0.4.v20220903-1038/jre/bin/java -vmargs --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/sun.security.ssl=ALL-UNNAMED -Dosgi.requiredJavaVersion=11 -Dosgi.dataAreaRequiresExplicitInit=true -Xms256m -Xmx2048m --illegal-access=permit --add-modules=ALL-SYSTEM -jar /home/cipher/Downloads/sts-4.16.0.RELEASE//plugins/org.eclipse.equinox.launcher_1.6.400.v20210924-0641.jar
解决方案
处理JVM terminated. Exit code=127
Exit code=127表示系统找不到指定可执行文件或依赖缺失,可按以下步骤解决:
- 安装JDK 17运行依赖:
sudo apt-get install libc6-dev libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev
- 改用系统已安装的JDK 8启动软件:
- 打开STS/Eclipse安装目录下的
sts.ini或eclipse.ini - 在
-vmargs之前添加以下内容(替换为你的JDK 8路径):-vm /usr/lib/jvm/java-8-openjdk-amd64/bin/java
- 打开STS/Eclipse安装目录下的
处理org.eclipse.swt.SWTError: No more handles
该错误由SWT无法创建原生UI组件导致,可尝试以下方法:
- 安装GTK 3依赖包:
sudo apt-get install libgtk-3-0 libgtk-3-dev
- 强制软件使用GTK 2:
- 在
sts.ini或eclipse.ini中添加参数:--launcher.GTK_version 2 - 或启动前设置环境变量:
export SWT_GTK3=0 ./SpringToolSuite4
- 在
- 清理工作区缓存:
- 关闭软件
- 删除工作区目录下的
.metadata/.plugins/org.eclipse.core.resources/.snap文件 - 重新启动软件
内容的提问来源于stack exchange,提问作者cipher
相关产品推荐
相关产品推荐

