【问题标题】:How do I run an external program inside a Java frame in netbeans in a platform independent manner?如何以独立于平台的方式在 netbeans 中的 Java jframe 内运行外部程序?
【发布时间】:2011-09-25 08:48:36
【问题描述】:

我目前正在为一所大学做一个研究项目,我正在与我的数据库进行 GUI 交互并基于数据启动一个外部程序。我正在使用运行时命令(一旦检测到操作系统)使用所选数据启动该外部程序。

我的问题是如何将外部程序的 GUI 嵌入到 Java 框架中,如果这甚至可以远程实现的话?

【问题讨论】:

  • 它是一个 GUI,还是您希望控制台输出显示在您的 JFrame 中?
  • 我希望在我的 GUI 项目中的 JFrame 中显示程序窗口。我要加载到 JFrame 上的程序是可视分子程序,而不是控制台程序。
  • 是的,我想在 JFrame 中运行的程序是一个 GUI。
  • 不太可行。也许有一些跨平台库具有 Windows 和 Linux 的实现来获取窗口句柄、放置和调整它们的大小。但是如何支持Windows 12等。
  • 一个更实用的解决方案是确保外部程序具有独立于 Swing GUI 运行所需的输入,并在同一监视器或单独的监视器上并行运行两个 GUI。

标签: java external


【解决方案1】:

【讨论】:

  • 正如我所说,我已经在项目中使用运行时,并且我的外部程序成功启动。问题是,我现在希望该程序出现在 jFrame 中,而不是在它之外。
【解决方案2】:

您使用的是控制台应用程序吗?您必须拦截其标准输出才能正确执行。因此,您可以在可以放入 JFrame 的 UI 控件中显示第 3 方应用程序正在输出的文本。

【讨论】:

  • 不,我正在使用我的自定义代码与 Netbeans GUI 代码相结合。这个过程会相似吗?
  • 我想在 JFrame 中运行的应用程序是一个 GUI
  • @Cecil O'Dell:您是否试图在另一个应用程序的 GUI 中显示一个应用程序的 GUI?我相信那会非常复杂。如果您编写的应用程序适当地分离了层(UI、业务逻辑、数据访问),您可以尝试在其之上构建一些 API,以便“主”应用程序的 GUI 可以替代原始 GUI。你也可以把它变成一个网络服务或网络应用程序,但这一切似乎都是一种矫枉过正。
  • 会有那么难做到吗?我最初的想法是应该有一些课程来为你处理大部分的复杂问题。
  • @Cecil O'Dell:对于基于 Web 的应用程序来说很容易的事情,对于桌面应用程序来说有时却过于复杂。除非您对应用程序的设计非常认真,否则将它们转换为 Web 架构将是一项重大的工作。如果您开发了这两个应用程序,您能否将它们重新组合到一个桌面应用程序中?
【解决方案3】:

鉴于对问题的澄清,简短的回答是“不,你不能那样做”。

Java 无法在 JFrame 中显示本机程序的 GUI,即使目标程序实际上被设计为允许其 GUI 显示在另一个程序的框架中。

【讨论】:

  • 不过,可能存在依赖于系统的方法。
  • @Paulo:我已经使用了很多 JNI,即使这样我也看不到 @Cecil 想要的方向。
  • 你知道C++能不能做我想做的事吗?
  • 我不知道它是怎么做到的,但是Eclipse可以完美地做到这一点。例如,如果您有一个 csv 或其他 excel 文件,您可以使用 (Right-Click)->Open With->In-Place Editor 打开它,然后 excel 窗口将在 eclipse 编辑器中打开。
  • @TheHarrisonCrafter:Eclipse 使用 SWT 而不是 Swing。确实,Windows API 允许嵌入其他应用程序,因此,与我的其他评论相反,它必须可以通过 JNI 实现;但不是直接使用 Swing。
【解决方案4】:

这取决于您要嵌入到 JFrame 的应用程序,但您可以尝试使用jawt: https://docs.oracle.com/javase/9/docs/specs/AWT_Native_Interface.html

您将能够获得本机操作系统特定的窗口句柄并可以在其上进行绘制,或者您可以将其用作容器。请注意,仅支持硬件组件,因此您需要将 Panel/Canvas 添加到 JFrame,然后将其用于您的本机应用程序。

这类似于这个问题: Native JNI/JAWT Swing application runs successfully on Java 6, but fails on Java 7 (64-bit Windows 7 OS)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 2017-02-13
    相关资源
    最近更新 更多