如何解决CS-Studio 4.4.1 + Debian 10 机器上的 Tango Controls:GUI 失败并显示 SWTException 和 NoClassDefFoundError,可能已弃用 Corba 类
所以...我正在尝试使用 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
关闭GUI窗口时出现以下错误:
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)
...
当我用谷歌搜索时,(我相信)我已经可以排除一些常见的情况了:
-
gtk 3 的问题:我的 cs-studio ini 文件有这行强制使用 gtk 2。
-
错误的java类路径:检查CSS的安装细节/配置,java类路径设置正确。
现在,以下两种情况的可能性更大:
-
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 举报,一经查实,本站将立刻删除。