Eclipse编辑java文件报Unhandled event loop exception错误的解决办法

本文记录了一次使用 Eclipse Kepler 版本过程中遇到的在编辑 Java 文件时频繁出现错误提示的问题,并详细描述了从问题发生到最终找到解决方案的过程。问题最终被确认为是由百度杀毒软件引起的。

本人Eclipse版本是”eclipse-jee-kepler-SR2-win32-x86_64“

       昨天因为换电脑,所以重装了一下软件,装好eclipse之后eclipse是可以使用的(换电脑之前也一直是用这个版本)。后来又装了其他一些软件,为了工作效率,只有边装软件边coding。后来发现再次在Eclipse中编辑java文件就一直会弹出错误提示框。如图。


点开图下面的“Unhandled event loop exception"查看具体的错误,详细错误如下。

eclipse.buildId=4.3.2.M20140221-1700

java.version=1.6.0_45
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US
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


Error
Wed Apr 02 16:20:12 CST 2014
Unhandled event loop exception


org.eclipse.swt.SWTError: No more handles
at org.eclipse.swt.SWT.error(SWT.java:4423)
at org.eclipse.swt.SWT.error(SWT.java:4312)
at org.eclipse.swt.SWT.error(SWT.java:4283)
at org.eclipse.swt.widgets.Widget.error(Widget.java:472)
at org.eclipse.swt.widgets.Control.createHandle(Control.java:704)
at org.eclipse.swt.widgets.Label.createHandle(Label.java:199)
at org.eclipse.swt.widgets.Control.createWidget(Control.java:744)
at org.eclipse.swt.widgets.Control.<init>(Control.java:112)
at org.eclipse.swt.widgets.Label.<init>(Label.java:101)
at org.eclipse.ui.texteditor.StatusLineContributionItem.fill(StatusLineContributionItem.java:182)
at org.eclipse.jface.action.SubContributionItem.fill(SubContributionItem.java:59)
at org.eclipse.jface.action.StatusLineManager.update(StatusLineManager.java:327)
at org.eclipse.ui.internal.WorkbenchPage.updateActivations(WorkbenchPage.java:286)
at org.eclipse.ui.internal.WorkbenchPage.access$15(WorkbenchPage.java:264)
at org.eclipse.ui.internal.WorkbenchPage$E4PartListener.partActivated(WorkbenchPage.java:193)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl$2.run(PartServiceImpl.java:192)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.firePartActivated(PartServiceImpl.java:190)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:609)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:553)
at org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer.activate(AbstractPartRenderer.java:104)
at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer$1.handleEvent(ContributedPartRenderer.java:59)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1081)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066)
at org.eclipse.swt.widgets.Shell.setActiveControl(Shell.java:1453)
at org.eclipse.swt.widgets.Shell.WM_MOUSEACTIVATE(Shell.java:2334)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4655)
at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340)
at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1627)
at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2075)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4990)
at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2544)
at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:80)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4706)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4990)
at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2544)
at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:80)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4706)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4990)
at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2544)
at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:80)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4706)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4990)
at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2544)
at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:80)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4706)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4990)
at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2544)
at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:80)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4706)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4990)
at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2544)
at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:80)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4706)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4990)
at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2544)
at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:80)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4706)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4990)
at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2544)
at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:80)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4706)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4990)
at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2544)
at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:80)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4706)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4990)
at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2544)
at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:80)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4706)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4990)
at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2544)
at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:80)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4706)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4990)
at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2544)
at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:80)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4706)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4990)
at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2544)
at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:80)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4706)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4990)
at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2544)
at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:80)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4706)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4990)
at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2544)
at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:80)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4706)
at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4990)
at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:2544)
at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:80)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4706)
at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4990)
at org.eclipse.swt.internal.win32.OS.PeekMessageW(Native Method)
at org.eclipse.swt.internal.win32.OS.PeekMessage(OS.java:3141)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1113)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:997)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:140)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:611)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:567)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
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(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
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)

at org.eclipse.equinox.launcher.Main.main(Main.java:1426)

一大堆的错误信息,看不懂。上网搜了下,有的说是要把eclipse目下的Features目录和Plugins目下的所有带有org.eclipse.ui字样目录和jar给删掉。试了下也还是问题照旧。


没办法,只有删掉Eclipse,重新安装一个完整的试试。去官网上重新下载了”eclipse-jee-kepler-SR2-win32-x86_64“这个版本,结果同样的问题还是会出现。


发现在错误消息中有一个是关于Git的,详细信息如下:

Warning: The environment variable HOME is not set. The following directory will be used to store the Git
user global configuration and to define the default location to store repositories: 'C:\Users\Administrator'. If this is
not correct please set the HOME environment variable and restart Eclipse. Otherwise Git for Windows and
EGit might behave differently since they see different configuration options.
This warning can be switched off on the Team > Git > Confirmations and Warnings preference page.

感觉是不是因为安装Git的原因? 因为我的Git目录是装在”D:\Program Files (x86)“下,首先感觉应该是因为目录中有空格,可能是因为它引起来的。然后果断重装下Git,把目录放在”D:\Gi“下。重装好Git之后,重启Eclipse,再编辑java文件,问题还是出现了。


无意间在知乎上看到也有人碰到类似的问题,有人回复说把 百度杀毒 关了就好了。自己也正好运行着百度杀毒呢。然后立马把百度杀毒给关了。重启Eclipse,在编辑java文件,发现问题解决了。为了验证就是百度杀毒引起来的,我有开启了百度杀毒,然后又重启Eclipse,编辑java文件,结果问题又出现了。关了百度杀毒就好了。


看来真是百度杀毒引起来的(百度杀毒是因为安装一个软件强制给装上的,当时感觉既然装了,就用下吧)。果断卸掉!


<think> 我们正在处理的问题是:Java程序中'Unhandled event loop exception'和'Java heap space'错误的解决方案。 根据提供的引用,这些错误通常出现在Eclipse或Dbeaver等Java应用程序中,与Java堆内存不足有关。 分析引用内容: 引用[1]和[2]:提到EclipseUnhandled event loop exception Java heap space,解决方案包括调整堆内存参数(Xms和Xmx)。 引用[3]和[4]:提到Dbeaver中同样错,同样通过调整内存参数解决。 因此,我们可以总结出,这个问题主要是由于Java应用程序的堆内存设置不足,导致在事件处理循环中(例如用户操作触发大量事件)内存不足,从而抛出OutOfMemoryError(Java heap space)。错误信息中的“Unhandled event loop exception”表示事件循环线程中发生了未处理的异常(即内存不足)。 解决方案核心:增加Java堆内存。 具体步骤(以Eclipse为例,其他Java应用程序类似): 1. 找到应用程序的配置文件Eclipseeclipse.ini,Dbeaver是dbeaver.ini)。 2. 修改配置文件中的堆内存参数(-Xms和-Xmx),增大值。 3. 保存并重启应用程序。 详细步骤如下: 步骤1:定位配置文件 - Eclipse:在Eclipse安装目录下找到`eclipse.ini`文件。 - Dbeaver:在Dbeaver安装目录下找到`dbeaver.ini`文件。 步骤2:修改内存参数 打开配置文件,找到类似以下参数的行: -Xms<初始堆大小> -Xmx<最大堆大小> 例如,默认可能是: -Xms256m -Xmx1024m 我们可以适当增大,比如: -Xms512m -Xmx2048m (或者更大,根据机器内存情况) 注意:如果配置文件中没有这些参数,可以手动添加在`-vmargs`之后。 步骤3:保存并重启应用程序。 另外,引用[2]中还提到Perm区(永久代,在Java 8之前)或元空间(Java 8及之后)也可能导致内存问题。如果是永久代内存不足,可以调整: -XX:PermSize=<初始值> -XX:MaxPermSize=<最大值> 在Java 8及以上,永久代被元空间取代,参数改为: -XX:MetaspaceSize=<初始值> -XX:MaxMetaspaceSize=<最大值> 但是,引用[2]中的案例显示,即使调整了堆内存,仍然可能出现问题,所以我们需要根据错误日志判断是哪个区域内存不足。 补充建议: 1. 检查代码:如果是在开发中,检查是否有内存泄漏,比如无限循环创建对象等。 2. 监控内存使用:使用VisualVM等工具监控应用程序的内存使用情况。 3. 如果是在IDE中操作时出现(如Eclipse中按Ctrl键),可能是IDE的代码索引或代码提示功能导致内存占用过高,可以尝试关闭一些插件或增大内存。 针对不同场景的解决方案: 场景1:Eclipse中出现该错误 修改`eclipse.ini`,例如: -vmargs -Xms512m -Xmx2048m -XX:MaxPermSize=512m (如果使用Java 7或以下) -XX:MaxMetaspaceSize=512m (如果使用Java 8及以上) 场景2:Dbeaver中出现该错误(如引用[4]) 修改`dbeaver.ini`,例如: -Xms512m -Xmx2048m 场景3:运行自己的Java程序出现该错误 如果是运行自己的程序,可以通过JVM参数调整: java -Xms512m -Xmx2048m -jar your_application.jar 如果调整后问题仍然存在,可能需要进一步分析内存使用情况,使用内存分析工具(如Eclipse Memory Analyzer)检查是否存在内存泄漏。 最后,注意调整内存大小不要超过物理内存的可用量,否则可能导致系统卡顿。 根据以上分析,我们可以给出总结性的解决方案。 注意:在回答中引用参考文档的地方需要标注引用标记。 </think> ### Java程序中`Unhandled event loop exception`和`Java heap space`错误解决方案 #### 错误原因分析 这两个错误通常同时出现,根本原因是**JVM堆内存不足**导致的连锁反应: 1. **`Java heap space`**:Java堆内存耗尽,无法分配新对象 2. **`Unhandled event loop exception`**:因内存不足导致GUI事件处理线程崩溃 3. 触发场景:通常在IDE(如Eclipse)或数据库工具(如DBeaver)中处理大型文件/数据集时发生[^1][^3] ```mermaid graph LR A[内存密集型操作] --> B{堆内存不足} B --> C[Java heap space错误] C --> D[事件循环线程崩溃] D --> E[Unhandled event loop exception] ``` #### 解决方案(分三步操作) ##### 步骤1:调整JVM堆内存参数 修改应用程序的JVM启动参数(关键步骤): ```ini # 在eclipse.ini或dbeaver.ini中添加/修改: -Xms1024m # 初始堆内存(建议≥1GB) -Xmx4096m # 最大堆内存(建议4-8GB) -XX:MaxMetaspaceSize=512m # 元空间上限 ``` - **位置示例**: - Eclipse:`{eclipse安装目录}/eclipse.ini` - DBeaver:`{dbeaver安装目录}/dbeaver.ini` - 调整后内存占用比例应保持在75%以下[^2][^4] ##### 步骤2:优化应用程序配置 | 配置项 | 推荐值 | 作用 | |--------|--------|------| | 文件索引 | 关闭非必要项目索引 | 减少IDE内存占用[^1] | | SQL结果集 | 限制`FETCH_SIZE` | 避免大数据集加载[^3] | | 插件管理 | 禁用未使用插件 | 释放类加载内存 | ##### 步骤3:代码级优化(开发场景适用) ```java // 1. 及时释放资源 try (Connection conn = dataSource.getConnection()) { // 操作数据库 } // 自动关闭连接 // 2. 分页处理大数据查询 String sql = "SELECT * FROM large_table LIMIT ? OFFSET ?"; // 3. 避免内存泄漏 Map<Key, Value> cache = new WeakHashMap<>(); // 使用弱引用缓存 ``` #### 验证和监控 1. 启动后检查内存: ```bash jconsole # 监控堆内存使用 ``` 2. 关注关键指标: $$ \text{安全阈值} = \frac{\text{已用堆内存}}{\text{最大堆内存}} < 0.75 $$ 3. 出现`GC overhead limit exceeded`需进一步调优 #### 预防措施 - **定期重启**:长时间运行的GUI工具每日重启 - **升级64位JVM**:突破32位JVM的4GB内存限制 - **分配交换空间**:Linux系统设置Swap空间(至少8GB) > **重要提示**:内存调整后仍出现错误,需用`Eclipse Memory Analyzer`分析堆转储文件定位内存泄漏[^2]
评论 53
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值