【问题标题】:Parent Window Slows down a lot on using SetParent through JNA Java父窗口通过 JNA Java 使用 SetParent 减慢了很多
【发布时间】:2014-12-29 14:59:06
【问题描述】:

我正在尝试使用 SetParent 在 Java JFrame 中嵌入游戏窗口。我正在使用 Java JNA User32 库使用以下类型的代码。

SetParent(GameWin,JFrameWin);
SetWindowPosF(GameWin,null,Game_X_pos ,Game_Y_pos+1,0,0,0x0020 | 0x0001 | 0x0008);

上面的代码工作正常,我的游戏窗口成功地成为了 JFrame 的一部分。 但是在我的 JFrame 中保留的控件(例如下拉列表和按钮)在执行此过程后会严重减慢。

  • 每当我单击 JFrame 中的任何按钮或下拉列表时,它都会在很长一段时间后响应,例如 1 或 2 分钟后。

  • 如果我不将我的游戏窗口嵌入到 JFrame 中,那么一切都会像往常一样正常工作。

【问题讨论】:

    标签: java swing winapi jna


    【解决方案1】:

    当您使一个进程的窗口成为另一个进程的窗口的父级时,您正在附加这些窗口的消息队列。

    游戏窗口可能有一个与普通 GUI 应用程序完全不同的消息循环。几乎可以肯定,这个游戏对及时调度窗口的排队消息不是很感兴趣。游戏没想到会被这样劫持。

    您可能无法采取任何措施来改善这种情况。跨流程育儿是基本上不应该做的事情。更多关于这个主题的阅读:http://blogs.msdn.com/b/oldnewthing/archive/2013/04/12/10410454.aspx

    【讨论】:

    • 好的,我知道了。但是有没有其他替代方法可以将我的游戏窗口停靠在 JFrame 中,这样它就不会减慢我的应用程序的速度。例如:虚拟地制作游戏窗口。我尝试使用 AttachThreadInput 在父窗口和子窗口之间共享焦点,但没有成功。因此,如果您能提出一些替代方法将游戏窗口停靠在 JFrame 中,那就太好了。
    • 如果没有其他进程的合作,我认为没有好的方法可以做到这一点。你为什么不和游戏开发者谈谈并一起努力呢?
    • 我自己就是游戏开发者。我在 Unity 3D 中开发了游戏并创建了一个 Unity3D 构建可执行文件。我想停靠在 JFrame 中的那个可执行窗口。 Java 和 Unity 应用程序通过本地套接字连接进行通信。
    • 所以我猜你是在一个好地方。您需要了解这两个消息循环。可能只需要对游戏的消息循环进行修改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    相关资源
    最近更新 更多