【问题标题】:A separate GUI for a set of OSGI Bundles一组 OSGI 捆绑包的单独 GUI
【发布时间】:2020-09-13 00:39:40
【问题描述】:

我有一组 OSGI 包(大约 10 个,那些有激活/停用声明的包),它们统一在一个 .product 文件下,共同构成一个 java 应用程序。这些包做了很多工作,但作为输出,它们只是在控制台上打印一些重要的日志数据。

我想要做的 - 我想要一个简单的 GUI,它允许做 3 件事: 1)一个用于激活所有这些捆绑包的按钮(运行整个程序), 2)一个窗口,我将在其中看到所有输出日志数据, 3) 一个用于停用所有这些捆绑包的按钮(结束程序)。

最初我计划使用 e4 RCP。问题是,我不能只在这个大项目中添加一个新的 GUI 插件(捆绑包),因为存在位冲突:这些捆绑包中使用了 JNA,它加载了 32 位本机库。这意味着,所有的东西也应该在 32 位 jvm 上运行。但是,它在 64 位 eclipse 目标平台上运行(外部仅采用旧的 equinox 启动器,仍然支持 32 位),这个 tp 在我的公司中就像一个黄金标准,所以我不能只切换到 eclipse 32 位目标平台。捆绑并快乐。但是,据我了解,您不能只使用 32 位 SWT 库和使用 equinox 启动器一样的技巧,因为它们是 eclipse 的重要组成部分,并且应该保持与 eclipse 相同的位数。并且 Eclipse 允许使用部分 32/64 位库,并且可以选择仅针对

这让我寻找组织 GUI 和主逻辑之间关系的其他概念,特别是当我可以单独执行此操作时:f.e.我在我的 32 位目标平台中将我的 GUI 编码为一个完全独立的项目,然后以某种方式从主项目中调用这些东西(在运行时?)。在这里,我被困住了。如果我在一个项目中有 10 个捆绑包,我如何从另一个 (GUI) 项目中激活/停用它们?如何通过单击按钮等正确组织这种通信?真的有可能吗?也许不是 e4,而是其他一些乐器?

我是 OSGI 开发的新手,如果我说了一些奇怪的话 - 提前抱歉。

【问题讨论】:

    标签: java eclipse user-interface osgi e4


    【解决方案1】:

    显而易见的解决方案似乎是使用 Swing? Swing 没有本机依赖项。

    您可以在 Java 中重定向 System.out/err,以便轻松捕获输出并将其显示在 Swing 组件中。您可以将此代码放在自己的包中。

    【讨论】:

    • 所以,我可以在这个项目的一个自己的包中使用 Swing 编写一个 GUI,然后与所有其他包一起激活该包,一切都会好起来的吗?没有冲突,因为 32-64 位目标平台/jvm/ 等等?为什么我从来没有听说过 Swing... 还有一个小问题:如果项目中的输出不是通过标准 System.out 等进行的,而是使用 slf4j 记录器,是否仍然可以在没有任何内容的情况下捕获输出问题?谢谢
    • Swing 是 Java 内置 GUI,SWT 是 Eclipse 团队可以理解的错误。 Swing 运行在 Java 运行的任何地方。如果你使用 SLF4J,你可以使用 slf4j.simple appender。这会记录到标准输出,或者您可以创建自己的附加程序,这很容易。为知道自己在做什么的人编写和测试它需要几个小时的工作。
    • 其实我还有一个问题。没有太多细节,只是概念上的。我如何在 Swing 中运行并通过激活按钮来结束所有项目 OSGI 捆绑包?我应该使用哪种事件(或如何正确调用)?
    • 我可能说错了。当然,所有捆绑软件都使用 Equinox 启动器自动启动,所以如果我的 GUI 也是捆绑软件和项目的一部分,那不是问题。但是假设我想用一个按钮从 GUI 中关闭所有激活的捆绑包。我怎么做才能确定按下按钮后所有捆绑包都将被停用?
    • 要么停止框架(bundle 0),要么只执行 System.exit(0)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 2012-06-26
    • 2015-08-13
    • 2015-05-22
    • 2015-10-04
    • 2023-03-03
    • 2014-05-02
    相关资源
    最近更新 更多