gpt4 book ai didi

java - 加载 bufferedImage 会禁用 JPanel 的 paintCompontent 方法

转载 作者:行者123 更新时间:2023-11-30 06:30:03 24 4
gpt4 key购买 nike

我对 BufferedImage 和 JPanel 有一个小问题。我正在创建一个带有一些 2d 动画的游戏。

基本上我有一个 animationHandler 会循环遍历图片并且根据旋转也会正确显示它。但问题是 - 当我加载图片时,我的 Jpanel 不会绘制任何东西。如果我注释掉自定义绘制方法并不重要 - paintComponent 方法不会绘制任何东西,它似乎跳过了 paintCompontent 方法。即使游戏没有崩溃并且计时器仍在运行 - 它也不会在扩展的 JPanel 中使用 paintComponent 方法。

包含计时器的类 - 通过 JPanel.repaint() 调用 JPanel;

这里是loadImg方法

/**
* Test method to check animationHandler and bufferedImgs
*/
private void loadImages() {
BufferedImage b_1;
BufferedImage b_2;
BufferedImage b_3;
BufferedImage b_4;
BufferedImage b_5;

BufferedImage[] imgs = new BufferedImage[5];
try {
b_1 = ImageIO.read(new File("warlock1.png"));
b_2 = ImageIO.read(new File("warlock2.png"));
b_3 = ImageIO.read(new File("warlock3.png"));
b_4 = ImageIO.read(new File("warlock4.png"));
b_5 = ImageIO.read(new File("warlock5.png"));

imgs[0] = b_1;
imgs[1] = b_2;
imgs[2] = b_3;
imgs[3] = b_4;
imgs[4] = b_5;

animationHandler.addAnimation(imgs);
} catch (Exception e) {
e.printStackTrace();
}
}

干杯!

最佳答案

您可能正在 Swing 事件线程或 EDT(事件调度线程)上加载图像,并且由于 EDT 负责所有 Swing 图形和用户交互,这将卡住您的 Swing 应用程序,直到加载完成。解决方案:在后台线程上加载图像,例如可以从 SwingWorker 对象获取图像。请查看 Concurrency in Swing有关此主题的更多教程。

此外,如果可能并且图像不是太大,通常最好加载图像一次,然后保存对它们或 ImageIcon 的引用。

最后,无论您做什么,都不要在 paintComponent(...) 方法中加载图像。这种方法必须精益求精——尽可能快,而且它应该关注绘画而不是其他。否则您的程序的响应速度可能会变得非常慢。

此外,关于:

it wont use the paintComponent method in an extended JPanel.

您可能想向我们展示此代码。

关于java - 加载 bufferedImage 会禁用 JPanel 的 paintCompontent 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10866562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com