【问题标题】:Swing Works different on different PlatformSwing 在不同平台上的工作方式不同
【发布时间】:2014-09-20 11:15:15
【问题描述】:

我使用Java SwingXuggler 5.4 制作了一个屏幕录像机。我已经在 Windows 8 64 位中开发了它。它在 Windows 上运行良好。但是在 Linux 环境的客户端,没有任何工作。我已经彻底搜索但没有得到任何解决方案。我已经检查了这个 thread ,但它对我不起作用。

然后我尝试在 Linux 中创建简单的透明窗口,但它也无法正常工作。我无法单击可调整大小的面板。我对两者都使用了相同的JRE version (1.7)。就 Swing 而言,我是否错过了对 Java 的跨平台支持的理解? 请给我一些建议...

【问题讨论】:

  • " 就 Swing 而言,我是否错过了对 Java 的跨平台支持的理解?" 没有,但 Xuggler 是一个原生库的包装器,因此会引发一个题。 Swing/Java 使用的许多功能依赖于底层平台为其提供支持的能力。如果操作系统不支持,或者没有相关概念,那么 Java 根本无法支持该功能。例如,GraphicsDeviceisWindowTranslucencySupported,它采用TRANSLUCENTPERPIXEL_TRANSLUCENT 来确定对透明窗口功能的支持
  • 但是我刚刚制作了一个测试代码,使框架透明,它适用于 Windows 但不适用于 Linux..我可以在 windows 中单击框架,但在 Linux 中则不能
  • 但归根结底,我们受制于底层操作系统的能力。您的窗口是否附加了任何鼠标侦听器(或附加到框架内的任何组件)?
  • 回顾 Java 5,例如,API 非常平淡,非常基本的功能可以提供给几乎所有平台。 Jav 6 引入了SystemTray 的概念,但并非所有平台都有“系统托盘”的概念。它还引入了透明/半透明/异形窗口,这又是一个并非适用于所有平台的概念,所以突然间我们有了这个抽象层的灰色,其中一些功能“可能”工作,“一些”时间。 Desktop 是另一个我们“喜欢”但可能无法在所有平台上使用的功能示例......
  • 您看,一个想法可能是启动“选择”部分,这将允许您定义要捕获的区域,但是一旦定义了选择,就隐藏窗口。 .不确定这是否是一个可行的想法,但这是一个想法......

标签: java linux swing awt xuggler


【解决方案1】:

我一直认为日志记录是您可以使用的最佳调试工具!很多时候,java 调试器会带你进入你不需要每次都去的 API。记录变量的值,以及通用的“我已经达到这一点”语句让生活变得更轻松。

所以,我想您已经在代码中完成了充足的日志记录。这可以为您提供有关客户系统上正在发生的事情的线索。 是否设置了正确的环境变量?他们是否指向您需要的正确 Java 版本。 如果您的代码有一些特定的屏幕捕获要求(插件/模块/API),它们是否在 Linux m/c 上可用? 就像@MadProgrammer 所说,最后,Java 必须与原生图形 API 对话才能渲染您的屏幕。 我会尝试以这种方式调试它 -

  1. 检查我的主屏幕是否加载(通过禁用屏幕捕获功能一段时间)。
  2. 如果没有,请深入挖掘。
  3. 检查捕获屏幕(音频和视频)所需的所有组件是否可用。
  4. 检查代码是否以适当的权限运行以控制您可能需要的硬件设备。

【讨论】:

  • 我添加了记录器,但问题是如果某些部分不起作用,我可以从记录器中获取。但是这里没有任何东西可以正常工作:( ..我只是尝试制作简单的透明屏幕没有 xuggler 什么都只是摆动..但它在两个系统上的工作方式不同
猜你喜欢
  • 2019-01-09
  • 2015-07-18
  • 2017-09-08
  • 2018-12-11
  • 1970-01-01
  • 2016-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多