【问题标题】:SwingUtilities.invokeLater() displaying just during one frameSwingUtilities.invokeLater() 仅在一帧期间显示
【发布时间】:2013-04-15 10:35:05
【问题描述】:

我正在使用 Swing 来创建一个小型 Java 2D 游戏。我只尝试显示图像。因为我不在 EDT 上,所以我使用 SwingUtilities.invokeLater() 来做这些事情。当我使用它时,图像不显示(实际上它在几毫秒内显示并消失)。 当我不使用 SwingUtilities.invokeLater() 时,图像会正确显示,但我需要使用 invokeLater()。

这是我的基本代码:

public class Test {

/**
 * @param args
 */
public static void main(String[] args) {
    try {
        SwingUtilities.invokeAndWait(new Runnable() {

            @Override
            public void run() {
                final BreizhFrame frame = new BreizhFrame();
                File imgFile = new File("src/test/lvl1-800x450.jpg");
                System.out.println(String.valueOf(imgFile.exists()));
                System.out.println(SwingUtilities.isEventDispatchThread());
                Image i;
                try {
                    i = ImageIO.read(imgFile);
                    frame.getGraphics().drawImage(i, 0, 0, null);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
    } catch (InvocationTargetException | InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

}

有什么想法吗?

谢谢。

【问题讨论】:

  • frame.getGraphics().drawImage(i, 0, 0, null);有问题..
  • 在 main 外部声明这个“最终 BreizhFrame 框架”并尝试。
  • 花点时间阅读Custom Painting

标签: java swing swingutilities invokelater


【解决方案1】:

这不是你在 Java 中的做法。是的,您正在绘制图像,但一段时间后控件会失效,并且会在没有图像的情况下重新绘制。

This tutorial should help you

【讨论】:

  • 谢谢!这正是我需要的;)
猜你喜欢
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 2017-11-11
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多