【问题标题】:Eclipse freezes UI on UbuntuEclipse 在 Ubuntu 上冻结 UI
【发布时间】:2015-12-01 12:34:46
【问题描述】:

我最近安装了ubuntu 16.04(自动更新到这个版本),平时用Java开发,而且我懂eclipse,所以就安装了,没问题。

我配置了所有需要的东西(Java 路径、JDK...没什么特别的),工作正常,除了 Eclipse UI。

每次创建项目时 UI 都会冻结(尽管项目创建正确),每次运行任何程序时(尽管程序运行正常(并不总是正确 xD,但那是我的错)),并且许多其他任务。

知道为什么会发生这种情况吗?更好的是,如何解决?

我还仔细检查了我正在使用的 JRE(因为我发现人们在使用开源软件时遇到问题),我使用的是 oracle 的版本(现在不确定名称,抱歉,版本 8)。 它的所有内容都是 64 位版本。

编辑:我忘了说我使用的是火星版本。另外,我刚刚安装了NetBeans(8.1),完全一样的问题,然后我以为是显卡驱动问题,再次安装,仍然有同样的问题。不知道现在该尝试什么。

更新:检查日志文件。我没有看到任何奇怪的东西,但可能会遗漏一些东西:

!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.

更新 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$3.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$2.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$2(ActionContributionItem.java:511)
    at org.eclipse.jface.action.ActionContributionItem$5.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$4.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$5.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

【问题讨论】:

  • eclipse 冻结不是 Java 问题...尝试从命令行而不是 eclipse 运行项目
  • 已经试过了。是的,也使用 sudo 命令:)
  • 关于UI冻结...在您运行项目后,它是在项目启动时立即冻结还是在您执行某些操作后立即冻结?
  • 只有当我做某事时,正如我已经说过的那样,我认为这是“有趣”的部分,它可以很好地完成每一项任务,它只是冻结 UI,我必须重新启动它。
  • 我可能是错的,但也许在某个你不知道的地方存在无限循环,这导致 UI 冻结...尝试在 eclipse 中调试它做同样的事情它冻结了。我在记事本++中编程,所以我使用了穷人的调试器... System.out.println() 语句贯穿整个代码。

标签: java eclipse user-interface ubuntu freeze


【解决方案1】:

你应该生成一个eclipse进程的java线程转储,比如:

  1. 建立进程id:

    jps -lv
    

    识别代表 Eclipse 实例的行并记住该行的第一个数字,即进程 ID。

  2. 使用进程ID触发线程转储:

    jstack -l process_id > jstack.out
    

这样,您将获得当时在JVM 中处于活动状态的每个线程的堆栈跟踪。从这里您应该能够确定您的程序未运行的原因。

【讨论】:

  • 我试过这个。只打印一堆 Theads are waiting,几个 Runnable 和一些其他 Timed_Waiting。 (我猜这最后一个是错误的?我找不到任何相关信息)
  • @Mayuso 您应该检查您的Main 线程是否处于等待/锁定状态。线程转储中堆栈跟踪的顺序无关紧要。但是,如果您在列表中找不到您的 Main 线程并且您说这发生在 NetBeans 上,那么这意味着您的 java JVM 问题,您是否尝试过另一个 JVM?也许试试1.7OpenJVM
  • Main 处于“可运行”状态。
  • 已更新。就是这样:)
  • @Mayuso 你试过禁用 GTK 吗?它似乎与 Zoltan 建议的 GTK 有关。然后把GTK2的主题改成氧气以外的东西,好像有报道说氧气的主题也影响了eclipse。
【解决方案2】:

我已经发现了问题。正如 Zoltán 和 Dan 指出的那样,GTK 是问题所在。

解决方案:(仅在 Eclipse 上测试):

  1. 转到窗口>首选项>常规>外观。
  2. 将“GTK”主题更改为您喜欢的任何其他主题。

这解决了我的问题。

【讨论】:

  • 我试过了,但问题仍然存在。下载 eclipse neon 版本为我解决了这个问题。
  • 这解决了我的问题。我也在运行 ubuntu 16.04 :)
【解决方案3】:

打开https://bugs.eclipse.org/bugs/show_bug.cgi?id=492829 以跟踪这可能是 SWT / GTK3 交互中的错误。

【讨论】:

    【解决方案4】:

    Linux 上的 Eclipse UI 默认使用 GTK 3 显示内容,但我发现经常出现问题。我不确定这是否是问题的根源,但您可以通过使用环境变量设置禁用 GTK 3 支持来检查它:export SWT_GTK3=0。但是,在您发现这是问题的根源之前,我不会永久打开它。

    【讨论】:

    • 这个治愈的 Eclipse 4.5.2 在调用 org.eclipse.swt.internal.gtk.os.Call[native] 时似乎在一个核心上旋转。特定版本是 libgtk 3.18.9-1ubuntu3。谢谢!我正在认真考虑启动 Windows 10。
    【解决方案5】:

    我认为早期版本的 Eclipse 会出现此问题。我尝试使用 Eclipse Mars for Java 和 J2ee。 我签入了霓虹灯版本;这个问题没有发生。 Eclipse 没有冻结。

    【讨论】:

      猜你喜欢
      • 2014-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      • 2014-11-12
      • 2022-01-25
      • 2015-01-16
      相关资源
      最近更新 更多