Java Swing在不同的平台上工作不同

Java Swing在不同的平台上工作不同,java,linux,swing,awt,xuggler,Java,Linux,Swing,Awt,Xuggler,我用JavaSwing和Xuggler5.4制作了一个屏幕记录器。我已经在64位Windows 8中开发了它。它在Windows上运行得非常好。但在Linux环境的客户端,什么都不起作用。我已经彻底搜索过了,但没有找到任何解决办法。我已经检查过了,但对我不起作用 然后我尝试在Linux中创建简单的透明窗口,但它也不起作用。我无法单击可调整大小的面板。我对这两个版本都使用了相同的JRE版本(1.7)。就Swing而言,我是否理解Java的跨平台支持? 请给我一些建议…我一直认为日志记录是您可以使用

我用
JavaSwing
Xuggler5.4
制作了一个屏幕记录器。我已经在64位Windows 8中开发了它。它在Windows上运行得非常好。但在Linux环境的客户端,什么都不起作用。我已经彻底搜索过了,但没有找到任何解决办法。我已经检查过了,但对我不起作用

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

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

因此,我想您在代码中已经做了大量的日志记录。这可能会给你客户系统发生了什么的线索。 是否设置了正确的环境变量?它们是否指向您需要的正确Java版本。 如果您的代码有一些特定的屏幕捕获要求(插件/模块/API),那么它们在Linux m/c上可用吗? 正如@MadProgrammer所说,最终,Java必须与本机图形API进行对话才能呈现屏幕。 我会尝试以这种方式调试它-

  • 检查我的主屏幕是否加载(暂时禁用屏幕捕获功能)
  • 如果没有,那就深入挖掘
  • 检查捕获屏幕所需的所有组件(音频和视频)是否可用
  • 检查代码是否以适当的权限运行,以控制您可能需要的硬件设备

  • “就Swing而言,我是不是错过了Java的跨平台支持?”不是,但是
    Xuggler
    是本机库的包装器,所以这就提出了一个问题。Swing/Java使用的许多功能依赖于底层平台为其提供支持的能力。如果操作系统不支持它,或者没有相关概念,那么Java根本无法支持该功能。例如,
    GraphicsDevice
    支持
    isWindowTransparency
    ,这需要
    transparent
    PERPIXEL_transparent
    来确定对透明窗口功能的支持,但我刚刚制作了一个测试代码,使框架透明,它适用于Windows,但不适用于Linux。我可以在Windows中单击框架,但在Linux中不能,但在一天结束时,我们的命运取决于底层操作系统的能力。您的窗口是否有任何鼠标侦听器连接到它(或连接到框架内的任何组件)?例如,回顾Java 5,API非常平淡,非常基本的功能,几乎可以提供给所有平台。Jav 6引入了系统托盘的概念,但并非所有平台都有“系统托盘”的概念。它还引入了透明/半透明/形状的窗口,同样,这是一个不适用于所有平台的概念,因此我们突然将这个抽象层变灰,其中一些功能“可能”起作用,“有时”
    Desktop
    是我们“喜欢”但并非在所有平台上都可能实现的功能的另一个示例……您知道,一个想法可能是启动“选择”部分,它允许您定义要捕获的区域,但在定义选择后隐藏窗口……不确定这是否可行,但这是一个想法…我添加了记录器,但问题是,如果某些部分不起作用,我可以从记录器获得。但在这里没有什么是正常工作:(…我试图只是使简单的透明屏幕没有xuggler没有什么只是摆动…但它在两个系统上的工作方式不同