Java 小程序在 Mac 上闪烁

标签 java swing japplet flicker

这个问题很奇怪。该问题并非在每个平台上都会发生。它发生在我使用 MacOSX 的谷歌浏览器中,但它不会发生在 Safari 中。对于使用 Windows 的 friend ,在谷歌浏览器上它完美运行。我还有一个使用 MacOSX 的 friend ,对他来说,它在 Chrome、Safari 和 Firefox 上闪烁。我们都有 MacOSX Lion。我没有看到任何链接。 请大家测试并报告是否发生,以及您的平台是什么(最多应在 30 秒内发生)?


我找到了 this thread on Oracle's forums .显然,这是 MacOSX 上的一个众所周知的问题,因为 Java 创建了一个子进程,而 Safari 不允许将此作为​​安全功能。然而,问题也出现在 Mac 上的 Chrome 和 Firefox 中(并且不像我那样出现在 Safari 上)。算了吧……我很乐意听到任何人对此的看法。


我目前正在制作一个小型 Java 俄罗斯方 block 游戏,我的问题是在小程序版本(扩展 JApplet)中屏幕偶尔会闪烁。当我在计算机上的 JFrame 中运行它时,一切正常。

可以在本站查看和使用小程序:http://mtetris.herokuapp.com/ (我不是要打广告或推销任何东西,我只是把它说出来,这样人们才能真正看到问题所在)。

(还有另一个问题是,当小程序未自动加载时,它无法正确获得鼠标焦点——即当浏览器阻止它并询问用户是否允许加载它时。如果“开始级别”数字没有正确突出显示,这就是原因。)

以下是我尝试过但未能解决闪烁问题的方法:

  • 将小程序的背景设置为黑色,将小程序中每个组件的根 Pane 、内容 Pane 设置为黑色。
  • 覆盖小程序的 paint() 方法并在其中进行双缓冲(我在当前代码中注释了这部分,因为它没有改进任何东西)
  • 覆盖小程序的update()方法,直接在里面调用paint()(该问题现已修复according to the method description in the official documentation)

完整的源代码可以在 github 上找到 this page .扩展 JApplet 的类是 TetrisApplication。源代码还不是很干净,所以,很抱歉。


我是这样实现双缓冲的

public class TetrisApplication extends JApplet {

    //  the dimension of the applet
    private Dimension dimension;
    // image used for double buffering
    Image offscreen;
    // the second buffer
    Graphics bufferGraphics;

    public void init() {
        super.init();
        dimension = getSize();
        offscreen = createImage(dimension.width, dimension.height);
        bufferGraphics = offscreen.getGraphics();
        ...
    }

    public void paint(Graphics g){
        bufferGraphics.clearRect(0, 0, dimension.width, dimension.height);
        super.paint(bufferGraphics);
        g.drawImage(offscreen, 0, 0, this);
    }
    ...
}

最佳答案

为了更流畅的绘制,覆盖JPanelpaintComponent()方法,它默认是双缓冲的。这answer讨论了一个例子。

关于Java 小程序在 Mac 上闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10324444/

相关文章:

java - 使用字符串变量创建主屏幕的新实例

java - 如何减少代码中的重复性?

java - 在 JPanel 中实例化 JApplet 实例?

java - 绘制形状在graphics2D中不起作用

java - 如何通过 Ant 将一个 jar 文件包含另一个 jar?

java - hdf5 Java 库入门

Java 与 CRM Dynamics 2011 集成问题

java - 有没有办法从 JFrame 返回特定元素?

java - 将 Jtable 保存到我使用 boolean 列创建的文件中

java - GUI 问题 - 布局行为很奇怪