问题描述
所以...我正在尝试使用 CSS 来构建 GUI 来控制 Linux 服务器中的 Tango 设备。运行非常简单的 GUI(仅从仪器读取电压并在显示器上更新)时,GUI 会运行,但过程变量“断开连接”,即使语法正确。
启动 GUI 时,控制台给我以下错误:
SEVERE [Thread 1] org.csstudio.logging.PluginLogListener (logging) - Unhandled event loop exception
org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.NoClassDefFoundError: org/omg/CORBA/UserException)
at org.eclipse.swt.SWT.error(SWT.java:4491)
at org.eclipse.swt.SWT.error(SWT.java:4406)
at org.eclipse.swt.widgets.Synchronizer.runAsyncmessages(Synchronizer.java:138)
at org.eclipse.swt.widgets.display.runAsyncmessages(display.java:3794)
at org.eclipse.swt.widgets.display.readAnddispatch(display.java:3433)
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:694)
...
Caused by: java.lang.NoClassDefFoundError: org/omg/CORBA/UserException
at java.base/java.lang.classLoader.defineClass1(Native Method)
at java.base/java.lang.classLoader.defineClass(ClassLoader.java:1017)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.defineClass(ModuleClassLoader.java:272)
...
Caused by: java.lang.classNotFoundException: org.omg.CORBA.UserException cannot be found by tangorb-jacorbfree_9.2.2
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:439)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:352)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:344)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:160)
at java.base/java.lang.classLoader.loadClass(ClassLoader.java:522)
... 62 more
SEVERE [Thread 1] org.csstudio.logging.PluginLogListener (logging) - Error disposing widget for : org.eclipse.e4.ui.model.application.ui.basic.impl.PartImpl OPI View
java.lang.NullPointerException
at org.csstudio.opibuilder.editparts.AbstractBaseEditPart.deactivate(AbstractBaseEditPart.java:315)
at org.csstudio.opibuilder.editparts.AbstractContainerEditpart.deactivate(AbstractContainerEditpart.java:291)
at org.csstudio.opibuilder.editparts.displayeditpart.deactivate(displayeditpart.java:181)
at org.eclipse.gef.editparts.AbstractEditPart.deactivate(AbstractEditPart.java:293)
at org.eclipse.gef.editparts.AbstractGraphicalEditPart.deactivate(AbstractGraphicalEditPart.java:354)
at org.eclipse.gef.ui.parts.AbstractEditPartViewer.unhookControl(AbstractEditPartViewer.java:768)
at org.eclipse.gef.ui.parts.GraphicalViewerImpl.unhookControl(GraphicalViewerImpl.java:442)
at org.eclipse.gef.ui.parts.AbstractEditPartViewer.setControl(AbstractEditPartViewer.java:634)
at org.eclipse.gef.ui.parts.AbstractEditPartViewer.handledispose(AbstractEditPartViewer.java:222)
at org.eclipse.gef.ui.parts.GraphicalViewerImpl.handledispose(GraphicalViewerImpl.java:109)
at org.eclipse.gef.ui.parts.AbstractEditPartViewer$2.widgetdisposed(AbstractEditPartViewer.java:436)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:123)
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:1334)
at org.eclipse.swt.widgets.Widget.release(Widget.java:1138)
at org.eclipse.swt.widgets.Control.release(Control.java:3814)
at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:1376)
at org.eclipse.swt.widgets.Widget.release(Widget.java:1141)
at org.eclipse.swt.widgets.Control.release(Control.java:3814)
at org.eclipse.swt.widgets.Composite.releaseChildren(Composite.java:1376)
at org.eclipse.swt.widgets.Widget.release(Widget.java:1141)
at org.eclipse.swt.widgets.Control.release(Control.java:3814)
at org.eclipse.swt.widgets.Widget.dispose(Widget.java:478)
at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.disposeWidget(SWTPartRenderer.java:177)
at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.disposeWidget(ContributedPartRenderer.java:272)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeRemoveGui(PartRenderingEngine.java:914)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$1(PartRenderingEngine.java:842)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$3.run(PartRenderingEngine.java:837)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
...
当我用谷歌搜索时,(我相信)我已经可以排除一些常见的情况了:
现在,以下两种情况的可能性更大:
-
JDK 8(2012 年发布)后弃用的 CORBA 类:似乎在 JDK 8 之后删除了一些 corba 类定义,可能会影响任何依赖项的调用。嗯,这是可能的,但是这些 GUI 是在 2018 年之后在 JDK 11 中开发和使用的(尽管在带有本地仪器的 Windows 机器上,现在我正在 Debian 10 机器上尝试远程探戈服务器)。为什么此时它仍要调用已弃用的 corba 类?
-
插件文件夹中缺少与SWT相关的*.jar文件:检查这些文件时,我只找到org.eclipse.swt.gtk.linux.x86_64_3.104.2.v20160212-1350 .jar 和 org.eclipse.swt_3.104.2.v20160212-1350.jar。但是(来自:Eclipse FAQ):
问:为什么我会收到错误“java.lang.NoClassDefFoundError: org/eclipse/swt/internal/XXX/OS.”? A:在一些平台如 GTK 上,SWT 被分解成多个 jar。因此,您必须确保所有必需的 jar 都在类路径上。所需的罐子是:
swt.jar (all platforms)
swt-pi.jar (some platforms like GTK and Carbon)
swt-mozilla.jar (for browser widget on GTK and Motif)
swt-gtk.jar (on Linux Motif)
到目前为止我还没有找到如何下载这些文件。任何人? 无论如何,这可能吗?有没有人遇到过这些问题?
感谢您的帮助。
干杯!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)