Eclipse 冻结了 Ubuntu 上的 UI
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/34020576/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Eclipse freezes UI on Ubuntu
提问by Mayuso
I have recently installed ubuntu 16.04 (updated automatically to this version) and I usually develop in Java, and I know eclipse, so I installed it, all fine.
最近安装了ubuntu 16.04(自动更新到这个版本),平时用Java开发,也知道eclipse,所以安装了,一切正常。
I configured everything needed (Java path, JDK...nothing special), works fine, except for the Eclipse UI.
我配置了所有需要的东西(Java 路径、JDK...没什么特别的),工作正常,除了 Eclipse UI。
The UI freezes every time I create a project (Although the project is created correctly), every time I run any program (Although the program runs as it should (not always correctly xD, but thats my fault)), and with many other tasks.
每次我创建一个项目(虽然项目创建正确),每次我运行任何程序(尽管程序按它应该运行(不总是正确 xD,但那是我的错))以及许多其他任务时,UI 都会冻结.
Any idea why this can happen? And even better, how to solve it?
知道为什么会发生这种情况吗?更好的是,如何解决它?
I also double checked what JRE I′m using (As I found people having problems with open source software), I use oracle′s version (Not sure about the name right now, sorry, version 8). Everything on it′s 64 bit version.
我还仔细检查了我正在使用的 JRE(因为我发现人们对开源软件有问题),我使用的是 oracle 的版本(现在不确定名称,抱歉,版本 8)。它的所有内容都是 64 位版本。
Edit: I forgot to mention I use Mars version. Also, I just installed NetBeans (8.1), exact same problem, then I thought it was graphics drivers problems, installed that again, still have the same problem. No idea what to try now.
编辑:我忘了提到我使用的是 Mars 版本。另外,我刚安装了 NetBeans (8.1),完全一样的问题,然后我以为是显卡驱动程序的问题,再次安装,仍然有同样的问题。现在不知道该尝试什么。
UPDATE:Checked log file. I see nothing strange, but might be missing something:
更新:检查日志文件。我看不出什么奇怪的,但可能会遗漏一些东西:
!SESSION 2015-12-04 13:24:38.930 -----------------------------------------------
eclipse.buildId=4.5.1.M20150904-0015
java.version=1.8.0_66
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=es_ES
Command-line arguments: -os linux -ws gtk -arch x86_64
!ENTRY org.eclipse.core.resources 2 10035 2015-12-04 13:24:40.542
!MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes.
UPDATE 2:I just run the commands @dan suggested. Here is the result
更新 2:我只是运行@dan 建议的命令。这是结果
"main" #1 prio=6 os_prio=0 tid=0x00007f0ec000a000 nid=0x26e0 runnable [0x00007f0ec9a18000]
java.lang.Thread.State: RUNNABLE
at org.eclipse.swt.internal.gtk.OS._gtk_widget_get_allocation(Native Method)
at org.eclipse.swt.internal.gtk.OS.gtk_widget_get_allocation(OS.java:14234)
at org.eclipse.swt.widgets.Control.getBounds(Control.java:832)
at org.eclipse.jface.fieldassist.ControlDecoration.getDecorationRectangle(ControlDecoration.java:1185)
at org.eclipse.jface.fieldassist.ControlDecoration.paintControl(ControlDecoration.java:635)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:230)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4481)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1329)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1353)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1338)
at org.eclipse.swt.widgets.Control.gtk_draw(Control.java:3219)
at org.eclipse.swt.widgets.Canvas.gtk_draw(Canvas.java:171)
at org.eclipse.swt.widgets.Shell.gtk_draw(Shell.java:1306)
at org.eclipse.swt.widgets.Widget.windowProc(Widget.java:1942)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:5590)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4717)
at org.eclipse.swt.internal.gtk.OS._gtk_main_do_event(Native Method)
at org.eclipse.swt.internal.gtk.OS.gtk_main_do_event(OS.java:9279)
at org.eclipse.swt.widgets.Display.eventProc(Display.java:1225)
at org.eclipse.swt.internal.gtk.OS._g_main_context_iteration(Native Method)
at org.eclipse.swt.internal.gtk.OS.g_main_context_iteration(OS.java:2425)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3428)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:172)
at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:387)
at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:1002)
at org.eclipse.jdt.internal.ui.wizards.NewElementWizard.performFinish(NewElementWizard.java:134)
at org.eclipse.jdt.internal.ui.wizards.NewClassCreationWizard.performFinish(NewClassCreationWizard.java:80)
at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:799)
at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:429)
at org.eclipse.jface.dialogs.Dialog.widgetSelected(Dialog.java:619)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4481)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1329)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3819)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3430)
at org.eclipse.jface.window.Window.runEventLoop(Window.java:827)
at org.eclipse.jface.window.Window.open(Window.java:803)
at org.eclipse.ui.internal.navigator.wizards.WizardShortcutAction.run(WizardShortcutAction.java:99)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:473)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:595)
at org.eclipse.jface.action.ActionContributionItem.access(ActionContributionItem.java:511)
at org.eclipse.jface.action.ActionContributionItem.handleEvent(ActionContributionItem.java:420)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4481)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1329)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3819)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3430)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1127)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1018)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:156)
at org.eclipse.ui.internal.Workbench.run(Workbench.java:654)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:337)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:598)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:139)
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 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:669)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:608)
at org.eclipse.equinox.launcher.Main.run(Main.java:1515)
at org.eclipse.equinox.launcher.Main.main(Main.java:1488)
Locked ownable synchronizers:
- None
采纳答案by Mayuso
I already found the problem. As Zoltán and Dan pointed out, GTK was the problem.
我已经找到了问题所在。正如 Zoltán 和 Dan 指出的那样,GTK 是问题所在。
Solution:(Only tested on Eclipse):
解决方案:(仅在 Eclipse 上测试过):
- Go to Window>Preferences>General>Appearance.
- Change "GTK" Theme for any other theme you like.
- 转到窗口>首选项>常规>外观。
- 将“GTK”主题更改为您喜欢的任何其他主题。
This fixed the problem for me.
这为我解决了问题。
回答by Zoltán Ujhelyi
The Eclipse UI on Linux is by default using GTK 3 to display contents, but I have found that there are often issues. I am not exactly sure whether this is the source of the issue, but you could check it by disabling the GTK 3 support using an environment variable setting: export SWT_GTK3=0
. However, until you have found out, this is the source of the issue, I would not turn it on permanently.
Linux 上的 Eclipse UI 默认使用 GTK 3 来显示内容,但我发现经常存在问题。我不是很确定这是否是问题的根源,但你可以通过禁用使用环境变量设置的GTK 3支持一下:export SWT_GTK3=0
。但是,在您发现之前,这是问题的根源,我不会永久打开它。
回答by dan
You should generate a java thread dump of the eclipse process, like:
您应该生成 eclipse 进程的 java 线程转储,例如:
Establish the process id:
jps -lv
Identify the line that is representing the eclipse instance and remember the first number on the line, the process id.
Trigger the thread dump, using the process id:
jstack -l process_id > jstack.out
建立进程id:
jps -lv
确定代表 eclipse 实例的行并记住该行的第一个数字,即进程 ID。
使用进程 ID 触发线程转储:
jstack -l process_id > jstack.out
This way you will get a stack trace for each thread that is alive in that JVM
at that moment. From here you should be able to identify why your program is not running.
通过这种方式,您将获得当时JVM
处于活动状态的每个线程的堆栈跟踪。从这里您应该能够确定您的程序没有运行的原因。
回答by vorburger
Opened https://bugs.eclipse.org/bugs/show_bug.cgi?id=492829to track this as likely bug in SWT / GTK3 interaction.
打开https://bugs.eclipse.org/bugs/show_bug.cgi?id=492829以将此作为 SWT/GTK3 交互中可能的错误进行跟踪。
回答by rajakanthan ramalingam
I think this problem occurs with earlier version of Eclipse. I tried with Eclipse Mars for Java and J2ee both. I checked in the Neon version; this issue is not occurring. Eclipse is not freezing.
我认为这个问题出现在早期版本的 Eclipse 中。我尝试将 Eclipse Mars 用于 Java 和 J2ee。我检查了霓虹灯版本;这个问题没有发生。Eclipse 不会冻结。