Java的Frame、JFrame、Jpanel动画闪屏解决办法

版权声明:如有转载,联系博主 https://blog.csdn.net/weixin_43260474/article/details/88746440

申明在先

通过添加双缓冲来解决
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());
}

至此解决卡屏问题,如有相同情况者,希望看这篇文章有所帮助

原创文章,转载标注

猜你喜欢

转载自blog.csdn.net/weixin_43260474/article/details/88746440