Java的Frame、JFrame、Jpanel动画闪屏解决办法
申明在先
通过添加双缓冲来解决
Frame、JFrame亲测效果不明显(这里介绍长见识)
读者视自己情况而定
图解双缓冲
该图片引自 百度百科
Frame的闪屏
主函数要继承 Frame 类
例如:public class GameFrame extends Frame
在类中添加下面这段代码
private Image ScreenImage = null;
public void updata(Graphics g) {
if (ScreenImage == null) {
//Constant.GAME_WIDTH--画面宽度
//Constant.GAME_HEIGHT--画面高度
ScreenImage = this.createImage(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);
}
Graphics gf = ScreenImage.getGraphics();
paint(gf);
g.drawImage(ScreenImage, 0, 0, null);
}
JFrame不用写双缓冲代码
效果比单用 Frame 效果好,但是作者程序依旧存在闪屏
重点 :运行程序时,出现蜜汁异常 — NullPointerException ,于是作者通过 Jpanel 解决了闪屏和异常的问题
Jpanel解决闪屏问题
代码展示
类需要继承 Jpanel 类
例如:public class GameFrame extends JPanel
同样,运用双缓冲时,要创建一个 JFrame对象 (例如:jf)
public void launchFrame() {
//创建双缓冲
JFrame jf = new JFrame();
jf.add(this);
//画窗口
jf.setTitle("Game");
jf.setVisible(true);
jf.setSize(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);
jf.setLocation(1000, 200);
//匿名内部类,结束窗口
jf.addWindowFocusListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//启动动画线程
new PaintThread().start();
//增加键盘监听
jf.addKeyListener(new KeyMonitor());
}
至此解决卡屏问题,如有相同情况者,希望看这篇文章有所帮助
原创文章,转载标注