【问题标题】:View Java GUI inside .NET Form / Visual Studio editor?在 .NET 表单/Visual Studio 编辑器中查看 Java GUI?
【发布时间】:2013-07-11 15:24:30
【问题描述】:

我的目标是为我的Java 应用程序编写一个Visual Studio 插件(VSPackage)。我想知道是否可以在System.Windows.Forms 实例中查看一些JPanels,或者更确切地说是Microsoft.VisualStudio.Editor

我在想一个小程序,但我几乎被困在那里......

将 Swing 组件流式传输为 JPEG 并将其显示在表单中是否适用?

编辑:

我真的很感激那些不仅仅是“是”/“否”/“你为什么要这样做?”的答案。我下定决心要以这种方式工作,所以我要求:

  • 实现我的目标的详细解决方案,或者,
  • 对我的方法应该采用的很好的见解/想法,或者,
  • 彻底解释为什么无法实现。
  • 【问题讨论】:

    • 这听起来很困难,如果不是不可能的话。为什么要以这种方式混合语言及其平台?这背后的动机是什么?你最好在这里坚持一个平台。您对这款产品的总体最终目标是什么?
    • 应用程序是Java,逻辑和UI复杂,我想受益于VS提供的一些工具。经过漫长的思考过程,我最好的解决方案是 VS 插件。如果我找不到解决方案,我将不得不在 C# 中重新实现大量代码,这是我非常想避免的。
    • 至少有两个适用于 Java 的“DIY IDE 框架工具包”(Eclipse RCPNetbeans Platform)可能提供类似于您尝试集成的 VS 的功能(但可能有助于添加一些有关您所追求的功能的信息),我认为检查这些可能是个好主意。
    • Java 可以很好地处理“复杂逻辑”和 UI。多年来,我一直在手动创建 Java GUI,并且还创建了 C# GUI。我更喜欢制作 Java GUI。但是话虽如此,如果您的程序仅适用于 Windows 应用程序,那么 Java 几乎没有 C# 无法做到的事情。所以我建议你选择并创建你的 GUI/程序。
    • 不确定 UI 内容的复杂性,但一个糟糕的起点可能是 improve.dk/compiling-java-in-visual-studio,但是您面临的风险是您创建的怪物会反对您。我会领导@hovercraft 充满鳗鱼的建议:-)

    标签: java .net swing visual-studio user-interface


    【解决方案1】:

    ( ) 勇士之道

    1. 从您的扩展加载 JVM(使用 jvm.dll)。
    2. 实现您自己的 Applet 容器。像这样AppletViewer
    3. 将 Applet Container 放入您的原生表单中。这很难,有办法获得 Applet Container HWND (In Java Swing how do you get a Win32 window handle (hwnd) reference to a window?),但我不确定一个简单的 SetParent 是否可以解决问题。
    4. 加载您的小程序。

    ( ) 主人之道

    1. 像浏览器一样使用NPAPI/NPRuntime
    2. 加载 npjp2.dll Java 插件。
    3. 加载您的小程序。

    (X) 采用的解决方案是:

    1. 在另一个进程(Java 的标准)中使用 JVM 运行用 Java(如 Applet)编写的 VS 插件部分。
    2. 使用FindWindow(Win32 API)获取HWND
    3. 使用SetParent (Win32 API) 和MoveWindow (Win32 API) 停靠窗口并调整其大小。

    我可以将其命名为“最简单的方式”,但在另一个进程中运行 Java 会给您带来更高的稳定性,因此这是“行之有效的方式”。我唯一担心使用来自另一个进程的窗口是,在 Java 中处理 Windows 消息的线程可能会干扰 Visual Studio。但在我看来,没有什么好害怕的。

    :-)

    【讨论】:

    • 两种有趣的方法,尽管我很确定即使 JVM 在扩展之外启动,我也可以获得 HWND。我将尝试实现两种方式的简单示例并让您知道。谢谢!
    • 使用你的“战士”方式的修改版本就像魅力一样。实际上根本没有战争......正如我所想的那样,在this guy 的帮助下,我能够将窗口从正在运行的java应用程序停靠在外部JVM上(使用FindWindow获取HWND从 user32.dll) 转换为 .NET 表单。
    • 非常棒的@Elist ! 很多年前,我和 SetParent 一起玩过,我知道它会起作用。从来没有想过Java会让你如此轻松地做到这一点。人们告诉你这是一个“白日梦”,很有趣。
    猜你喜欢
    • 2010-09-16
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多