Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有可能使JFrame始终位于应用程序之上。运行OpenGL和DirectX?_Java_Opengl_Jframe_Directx_Always On Top - Fatal编程技术网

Java 是否有可能使JFrame始终位于应用程序之上。运行OpenGL和DirectX?

Java 是否有可能使JFrame始终位于应用程序之上。运行OpenGL和DirectX?,java,opengl,jframe,directx,always-on-top,Java,Opengl,Jframe,Directx,Always On Top,我目前正在使用Java开发一个通知应用程序 我需要的窗口将很快(约10秒)在任何应用程序的顶部。包括运行OpenGL和DirectX(如电脑游戏)的软件。我知道JFrame.setAlwaysOnTop(true)仅适用于基于窗口的环境,而OpenGL和DirectX则不适用。 考虑过OpenGL绑定,但似乎找不到关于DirectX的任何信息 也许使用JNI是可能的? 欢迎提出任何意见:-) 编辑:谢谢大家的回答,但我实际上放弃了,决定在窗口全屏模式下强制游戏,我正在为其制作覆盖图。我只需等待,

我目前正在使用Java开发一个通知应用程序

我需要的窗口将很快(约10秒)在任何应用程序的顶部。包括运行OpenGL和DirectX(如电脑游戏)的软件。我知道
JFrame.setAlwaysOnTop(true)仅适用于基于窗口的环境,而OpenGL和DirectX则不适用。
考虑过OpenGL绑定,但似乎找不到关于DirectX的任何信息

也许使用JNI是可能的? 欢迎提出任何意见:-)


编辑:谢谢大家的回答,但我实际上放弃了,决定在窗口全屏模式下强制游戏,我正在为其制作覆盖图。我只需等待,看看测试人员对减少的fps有什么看法:-)再次感谢您不要为directx和java费心。阻抗不匹配。Java是跨平台的,OpenGL是跨平台的。如果您坚持使用directx,您可以尝试SWT,因为它使用本机操作系统资源,您可能有机会

对于opengl,您需要的是画布与panel/jframe的集成,您可以使用JOGL来实现。我认为lwjgl也有一个实现,但jogl更好。然后,您可以在该jframe上设置alwaysOnTop


kenai.com/projects/jogl

您的问题与代码无关,而是与图形设备有关。 在全屏模式下,设备只能有一个加速表面。这就是为什么你不能在全屏上启动两个DirectX游戏,如果你有一个双头GPU

最好的方法是尝试找到DX/OpenGL曲面指针,并使用所需的API将其附加到该指针上。我不知道这是否可以在Java中实现,但是方法是:

  • 获取指向正在运行的游戏或应用程序的加速表面的指针
  • 创建加速图形设备
  • 从用户界面创建非MIMAP纹理(屏幕截图)
  • 获取指向纹理曲面的指针
  • 使用从该曲面到步骤1中得到的曲面的拉伸矩形
  • 出席
如果不对每个帧使用Vsync和刷新率同步重复,这可能会导致闪烁。这也可能导致帧速率大幅下降


其中一个例子是FRAPS,它在加速应用程序上绘制当前帧速率。

您对OpenGL的理解是错误的。OpenGL没有专门的全屏模式。在OpenGL中,如果应用程序是全屏的,那么它只是一个常规的无边框、无装饰的全屏窗口。。JFrame.setAlwaysOnTop(真);当OpenGL游戏运行时,不在顶部。(java应用程序在游戏打开20秒后启动)你不能进入全屏模式,