使用双缓冲有点毁了我的小程序。它具有Java使用或覆盖脱precated API [英] using double buffering kinda ruin my applet. and it has java uses or overrides a deprecated API

查看:379
本文介绍了使用双缓冲有点毁了我的小程序。它具有Java使用或覆盖脱precated API的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的code实际上它只是一个移动的太空入侵者游戏。
我在网上搜索了动画
我曾尝试双缓冲,它摆脱了闪烁,但其破坏了整个输出。它也有Java使用或覆盖脱precated API。
注:-Xlint重新编译:详情德precation。这太难了......

 进口javax.sound.sampled中*。
导入的java.applet。*;
进口java.awt中的*。公共类太空侵略者扩展的Applet实现Runnable {
音频剪辑soundFile1;
INT xPosition位置= 500,Xposition1 = -500,Yposition = 15;
主题亚军;公共无效的start()
{
如果(亚军== NULL);
{
亚军=新主题(本);
runner.start();
}
}公共无效停止()
{
如果(亚军!= NULL);
{
runner.stop();
亚军= NULL;}
}公共无效的run()
{
而(真)
{
的setBackground(Color.black);
重绘();
尝试{视频下载(20);}
赶上(InterruptedException的E){}
}
}公共无效的init()
{
soundFile1 = getAudioClip(getDocumentBase(),si.au);
//soundFile1.play();
soundFile1.loop();
}
公共无效漆(图形G){
  g.setColor(Color.orange);
  g.fillRect(xPosition位置+ 50,10,10,10);
  g.fillRect(xPosition位置+ 60,10,10,10);
  g.fillRect(xPosition位置+ 40,20,10,10);
  g.fillRect(xPosition位置+ 50,20,10,10);
  g.fillRect(xPosition位置+ 60,20,10,10);
  g.fillRect(xPosition位置+ 70,20,10,10);
  g.fillRect(xPosition位置+ 30,30,10,10);
  g.fillRect(xPosition位置+ 40,30,10,10);
  g.fillRect(xPosition位置+ 50,30,10,10);
  g.fillRect(xPosition位置+ 60,30,10,10);
  g.fillRect(xPosition位置+ 70,30,10,10);
  g.fillRect(xPosition位置+ 80,30,10,10);
  g.fillRect(xPosition位置+ 20,40,10,10);
  g.fillRect(xPosition位置+ 30,40,10,10);
  g.fillRect(xPosition位置+ 50,40,10,10);
  g.fillRect(xPosition位置+ 60,40,10,10);
  g.fillRect(xPosition位置+ 80,40,10,10);
  g.fillRect(xPosition位置+ 90,40,10,10);
  g.fillRect(xPosition位置+ 20,50,10,10);
  g.fillRect(xPosition位置+ 30,50,10,10);
  g.fillRect(xPosition位置+ 40,50,10,10);
  g.fillRect(xPosition位置+ 50,50,10,10);
  g.fillRect(xPosition位置+ 60,50,10,10);
  g.fillRect(xPosition位置+ 70,50,10,10);
  g.fillRect(xPosition位置+ 80,50,10,10);
  g.fillRect(xPosition位置+ 90,50,10,10);
  g.fillRect(xPosition位置+ 40,60,10,10);
  g.fillRect(xPosition位置+ 70,60,10,10);
  g.fillRect(xPosition位置+ 30,70,10,10);
  g.fillRect(xPosition位置+ 50,70,10,10);
  g.fillRect(xPosition位置+ 60,70,10,10);
  g.fillRect(xPosition位置+ 80,70,10,10);
  g.fillRect(xPosition位置+ 20,80,10,10);
  g.fillRect(xPosition位置+ 40,80,10,10);
  g.fillRect(xPosition位置+ 70,80,10,10);
  g.fillRect(xPosition位置+ 90,80,10,10);  g.setColor(Color.red);
  g.fillRect(xPosition位置+ 140,10,10,10);
  g.fillRect(xPosition位置+ 200,10,10,10);
  g.fillRect(xPosition位置+ 120,20,10,10);
  g.fillRect(xPosition位置+ 150,20,10,10);
  g.fillRect(xPosition位置+ 190,20,10,10);
  g.fillRect(xPosition位置+ 220,20,10,10);
  g.fillRect(xPosition位置+ 120,30,10,10);
  g.fillRect(xPosition位置+ 140,30,10,10);
  g.fillRect(xPosition位置+ 150,30,10,10);
  g.fillRect(xPosition位置+ 160,30,10,10);
  g.fillRect(xPosition位置+ 170,30,10,10);
  g.fillRect(xPosition位置+ 180,30,10,10);
  g.fillRect(xPosition位置+ 190,30,10,10);
  g.fillRect(xPosition位置+ 200,30,10,10);
  g.fillRect(xPosition位置+ 220,30,10,10);
  g.fillRect(xPosition位置+ 120,40,10,10);
  g.fillRect(xPosition位置+ 130,40,10,10);
  g.fillRect(xPosition位置+ 140,40,10,10);
  g.fillRect(xPosition位置+ 160,40,10,10);
  g.fillRect(xPosition位置+ 170,40,10,10);
  g.fillRect(xPosition位置+ 180,40,10,10);
  g.fillRect(xPosition位置+ 200,40,10,10);
  g.fillRect(xPosition位置+ 210,40,10,10);
  g.fillRect(xPosition位置+ 220,40,10,10);
  g.fillRect(xPosition位置+ 120,50,10,10);
  g.fillRect(xPosition位置+ 130,50,10,10);
  g.fillRect(xPosition位置+ 140,50,10,10);
  g.fillRect(xPosition位置+ 150,50,10,10);
  g.fillRect(xPosition位置+ 160,50,10,10);
  g.fillRect(xPosition位置+ 170,50,10,10);
  g.fillRect(xPosition位置+ 180,50,10,10);
  g.fillRect(xPosition位置+ 190,50,10,10);
  g.fillRect(xPosition位置+ 200,50,10,10);
  g.fillRect(xPosition位置+ 210,50,10,10);
  g.fillRect(xPosition位置+ 220,50,10,10);
  g.fillRect(xPosition位置+ 130,60,10,10);
  g.fillRect(xPosition位置+ 140,60,10,10);
  g.fillRect(xPosition位置+ 150,60,10,10);
  g.fillRect(xPosition位置+ 160,60,10,10);
  g.fillRect(xPosition位置+ 170,60,10,10);
  g.fillRect(xPosition位置+ 180,60,10,10);
  g.fillRect(xPosition位置+ 190,60,10,10);
  g.fillRect(xPosition位置+ 200,60,10,10);
  g.fillRect(xPosition位置+ 210,60,10,10);
  g.fillRect(xPosition位置+ 140,70,10,10);
  g.fillRect(xPosition位置+ 200,70,10,10);
  g.fillRect(xPosition位置+ 130,80,10,10);
  g.fillRect(xPosition位置+ 210,80,10,10);  g.setColor(Color.blue);
  g.fillRect(xPosition位置+ 280,10,10,10);
  g.fillRect(xPosition位置+ 290,10,10,10);
  g.fillRect(xPosition位置+ 270,20,10,10);
  g.fillRect(xPosition位置+ 280,20,10,10);
  g.fillRect(xPosition位置+ 290,20,10,10);
  g.fillRect(xPosition位置+ 300,20,10,10);
  g.fillRect(xPosition位置+ 260,30,10,10);
  g.fillRect(xPosition位置+ 270,30,10,10);
  g.fillRect(xPosition位置+ 280,30,10,10);
  g.fillRect(xPosition位置+ 290,30,10,10);
  g.fillRect(xPosition位置+ 300,30,10,10);
  g.fillRect(xPosition位置+ 310,30,10,10);
  g.fillRect(xPosition位置+ 250,40,10,10);
  g.fillRect(xPosition位置+ 260,40,10,10);
  g.fillRect(xPosition位置+ 280,40,10,10);
  g.fillRect(xPosition位置+ 290,40,10,10);
  g.fillRect(xPosition位置+ 310,40,10,10);
  g.fillRect(xPosition位置+ 320,40,10,10);
  g.fillRect(xPosition位置+ 250,50,10,10);
  g.fillRect(xPosition位置+ 260,50,10,10);
  g.fillRect(xPosition位置+ 270,50,10,10);
  g.fillRect(xPosition位置+ 280,50,10,10);
  g.fillRect(xPosition位置+ 290,50,10,10);
  g.fillRect(xPosition位置+ 300,50,10,10);
  g.fillRect(xPosition位置+ 310,50,10,10);
  g.fillRect(xPosition位置+ 320,50,10,10); // 20 = 250 30 = 260 40 = 270 50 = 280 60 = 290 = 70 300 80 = 310 = 90 320
  g.fillRect(xPosition位置+ 260,60,10,10);
  g.fillRect(xPosition位置+ 280,60,10,10);
  g.fillRect(xPosition位置+ 290,60,10,10);
  g.fillRect(xPosition位置+ 310,60,10,10);
  g.fillRect(xPosition位置+ 250,70,10,10);
  g.fillRect(xPosition位置+ 320,70,10,10);
  g.fillRect(xPosition位置+ 260,80,10,10);
  g.fillRect(xPosition位置+ 310,80,10,10);
  g.setColor(Color.yellow);
  g.fillRect(xPosition位置+ 370,10,10,10);
  g.fillRect(xPosition位置+ 430,10,10,10);
  g.fillRect(xPosition位置+ 380,20,10,10);
  g.fillRect(xPosition位置+ 420,20,10,10);
  g.fillRect(xPosition位置+ 370,30,10,10);
  g.fillRect(xPosition位置+ 380,30,10,10);
  g.fillRect(xPosition位置+ 390,30,10,10);
  g.fillRect(xPosition位置+ 400,30,10,10);
  g.fillRect(xPosition位置+ 410,30,10,10);
  g.fillRect(xPosition位置+ 420,30,10,10);
  g.fillRect(xPosition位置+ 430,30,10,10);
  g.fillRect(xPosition位置+ 360,40,10,10);
  g.fillRect(xPosition位置+ 370,40,10,10);
  g.fillRect(xPosition位置+ 390,40,10,10);
  g.fillRect(xPosition位置+ 400,40,10,10);
  g.fillRect(xPosition位置+ 410,40,10,10);
  g.fillRect(xPosition位置+ 430,40,10,10);
  g.fillRect(xPosition位置+ 440,40,10,10);
  g.fillRect(xPosition位置+ 350,50,10,10);
  g.fillRect(xPosition位置+ 360,50,10,10);
  g.fillRect(xPosition位置+ 370,50,10,10);
  g.fillRect(xPosition位置+ 380,50,10,10);
  g.fillRect(xPosition位置+ 390,50,10,10);
  g.fillRect(xPosition位置+ 400,50,10,10);
  g.fillRect(xPosition位置+ 410,50,10,10);
  g.fillRect(xPosition位置+ 420,50,10,10);
  g.fillRect(xPosition位置+ 430,50,10,10);
  g.fillRect(xPosition位置+ 440,50,10,10);
  g.fillRect(xPosition位置+ 450,50,10,10); // 120 = 350 = 130 360 140 370 = 150 = 380 = 160 390 170 = 400 = 180 190 410 420 = 200 = 430 = 210 440 220 450 =
  g.fillRect(xPosition位置+ 350,60,10,10);
  g.fillRect(xPosition位置+ 370,60,10,10);
  g.fillRect(xPosition位置+ 380,60,10,10);
  g.fillRect(xPosition位置+ 390,60,10,10);
  g.fillRect(xPosition位置+ 400,60,10,10);
  g.fillRect(xPosition位置+ 410,60,10,10);
  g.fillRect(xPosition位置+ 420,60,10,10);
  g.fillRect(xPosition位置+ 430,60,10,10);
  g.fillRect(xPosition位置+ 450,60,10,10);
  g.fillRect(xPosition位置+ 350,70,10,10);
  g.fillRect(xPosition位置+ 370,70,10,10);
  g.fillRect(xPosition位置+ 430,70,10,10);
  g.fillRect(xPosition位置+ 450,70,10,10);
  g.fillRect(xPosition位置+ 380,80,10,10);
  g.fillRect(xPosition位置+ 390,80,10,10);
  g.fillRect(xPosition位置+ 410,80,10,10);
  g.fillRect(xPosition位置+ 420,80,10,10);
   Xposition--;
     如果(xPosition位置< -500)
  {
xPosition位置= 500;
} g.setColor(Color.green);
 g.fillRect(Xposition1 + 230,130,10,10);
 g.fillRect(Xposition1 + 240,130,10,10);
 g.fillRect(Xposition1 + 250,130,10,10);
 g.fillRect(Xposition1 + 260,130,10,10);
 g.fillRect(Xposition1 + 270,130,10,10);
 g.fillRect(Xposition1 + 280,130,10,10);
 g.fillRect(Xposition1 + 210,140,​​10,10);
 g.fillRect(Xposition1 + 220,140,​​10,10);
 g.fillRect(Xposition1 + 230,140,​​10,10);
 g.fillRect(Xposition1 + 240,140,​​10,10);
   g.fillRect(Xposition1 + 250,140,​​10,10);
  g.fillRect(Xposition1 + 260,140,​​10,10);
  g.fillRect(Xposition1 + 270,140,​​10,10);
  g.fillRect(Xposition1 + 280,140,​​10,10);
  g.fillRect(Xposition1 + 290,140,​​10,10);
  g.fillRect(Xposition1 + 300,140,​​10,10);
  g.fillRect(Xposition1 + 200,150,10,10);
 g.fillRect(Xposition1 + 210,150,10,10);
  g.fillRect(Xposition1 + 220,150,10,10);
 g.fillRect(Xposition1 + 230,150,10,10);
  g.fillRect(Xposition1 + 240,150,10,10);
   g.fillRect(Xposition1 + 250,150,10,10);
g.fillRect(Xposition1 + 260,150,10,10);
g.fillRect(Xposition1 + 270,150,10,10);
g.fillRect(Xposition1 + 280,150,10,10);
g.fillRect(Xposition1 + 290,150,10,10);
g.fillRect(Xposition1 + 300,150,10,10);
g.fillRect(Xposition1 + 310,150,10,10);
g.fillRect(Xposition1 + 190,160,10,10);
g.fillRect(Xposition1 + 200,160,10,10);
g.fillRect(Xposition1 + 220,160,10,10);
g.fillRect(Xposition1 + 230,160,10,10);
g.fillRect(Xposition1 + 250,160,10,10);
g.fillRect(Xposition1 + 260,160,10,10);
g.fillRect(Xposition1 + 280,160,10,10);
g.fillRect(Xposition1 + 290,160,10,10);
g.fillRect(Xposition1 + 310,160,10,10);
g.fillRect(Xposition1 + 320,160,10,10);
g.fillRect(Xposition1 + 180,170,10,10);
g.fillRect(Xposition1 + 190,170,10,10);
g.fillRect(Xposition1 + 200,170,10,10);
g.fillRect(Xposition1 + 210,170,10,10);
g.fillRect(Xposition1 + 220,170,10,10);
g.fillRect(Xposition1 + 230,170,10,10);
g.fillRect(Xposition1 + 240,170,10,10);
g.fillRect(Xposition1 + 250,170,10,10);
g.fillRect(Xposition1 + 260,170,10,10);
g.fillRect(Xposition1 + 270,170,10,10);
g.fillRect(Xposition1 + 280,170,10,10);
g.fillRect(Xposition1 + 290,170,10,10);
g.fillRect(Xposition1 + 300,170,10,10);
g.fillRect(Xposition1 + 310,170,10,10);
g.fillRect(Xposition1 + 320,170,10,10);
g.fillRect(Xposition1 + 330,170,10,10);
g.fillRect(Xposition1 + 200,180,10,10);
g.fillRect(Xposition1 + 210,180,10,10);
g.fillRect(Xposition1 + 220,180,10,10);
g.fillRect(Xposition1 + 250,180,10,10);
g.fillRect(Xposition1 + 260,180,10,10);
g.fillRect(Xposition1 + 290,180,10,10);
g.fillRect(Xposition1 + 300,180,10,10);
g.fillRect(Xposition1 + 310,180,10,10);
g.fillRect(Xposition1 + 210,190,10,10);
g.fillRect(Xposition1 + 300,190,10,10);
Xposition1 ++;
如果(Xposition1> 500)
{
    Xposition1 = -500;
}Yposition--;
如果(Yposition> 500)
{
    Yposition = -500;
}g.setColor(Color.magenta);
g.fillRect(260,Yposition + 240,10,10);
g.fillRect(260,Yposition + 250,10,10);g.setColor(Color.white);g.fillRect(260,310,10,10);
g.fillRect(250,320,10,10);
g.fillRect(260,320,10,10);
g.fillRect(270,320,10,10);
g.fillRect(250,330,10,10);
g.fillRect(260,330,10,10);
g.fillRect(270,330,10,10);
g.fillRect(200,340,10,10);
g.fillRect(210,340,10,10);
g.fillRect(220,340,10,10);
g.fillRect(230,340,10,10);
g.fillRect(240,340,10,10);
g.fillRect(250,340,10,10);
g.fillRect(260,340,10,10);
g.fillRect(270,340,10,10);
g.fillRect(280,340,10,10);
g.fillRect(290,340,10,10);
g.fillRect(300,340,10,10);
g.fillRect(310,340,10,10);
g.fillRect(320,340,10,10);
g.fillRect(190,350,10,10);
g.fillRect(200,350,10,10);
g.fillRect(210,350,10,10);
g.fillRect(220,350,10,10);
g.fillRect(230,350,10,10);
g.fillRect(240,350,10,10);
g.fillRect(250,350,10,10);
g.fillRect(260,350,10,10);
g.fillRect(270,350,10,10);
g.fillRect(280,350,10,10);
g.fillRect(290,350,10,10);
g.fillRect(300,350,10,10);
g.fillRect(310,350,10,10);
g.fillRect(320,350,10,10);
g.fillRect(330,350,10,10);
g.fillRect(190,360,10,10);
g.fillRect(200,360,10,10);
g.fillRect(210,360,10,10);
 g.fillRect(220,360,10,10);
g.fillRect(230,360,10,10);
g.fillRect(240,360,10,10);
g.fillRect(250,360,10,10);
g.fillRect(260,360,10,10);
g.fillRect(270,360,10,10);
g.fillRect(280,360,10,10);
g.fillRect(290,360,10,10);
g.fillRect(300,360,10,10);
g.fillRect(310,360,10,10);
g.fillRect(320,360,10,10);
g.fillRect(330,360,10,10);
g.fillRect(190,370,10,10);
g.fillRect(200,370,10,10);
g.fillRect(210,370,10,10);
g.fillRect(220,370,10,10);
g.fillRect(230,370,10,10);
g.fillRect(240,370,10,10);
g.fillRect(250,370,10,10);
g.fillRect(260,370,10,10);
g.fillRect(270,370,10,10);
g.fillRect(280,370,10,10);
g.fillRect(290,370,10,10);
g.fillRect(300,370,10,10);
g.fillRect(310,370,10,10);
g.fillRect(320,370,10,10);
g.fillRect(330,370,10,10);
g.fillRect(190,380,10,10);
g.fillRect(200,380,10,10);
g.fillRect(210,380,10,10);
g.fillRect(220,380,10,10);
g.fillRect(230,380,10,10);
g.fillRect(240,380,10,10);
g.fillRect(250,380,10,10);
g.fillRect(260,380,10,10);
g.fillRect(270,380,10,10);
g.fillRect(280,380,10,10);
g.fillRect(290,380,10,10);
g.fillRect(300,380,10,10);
g.fillRect(310,380,10,10);
g.fillRect(320,380,10,10);
g.fillRect(330,380,10,10);
}
公共静态无效的主要(字串[] args)
{ }
}


解决方案

首先,不这样做。

 公共无效的run(){
    而(真){
        的setBackground(Color.black);
        重绘();
        尝试{
            视频下载(20);
        }赶上(InterruptedException的E){
        }
    }
}

虽然我appricate,这个正在从的Runnable 上下文中运行的,你是从的事件指派线程,这是不是一个好主意。

您使用的是 <$ C的更好$ C> javax.swing.Timer中的 ,看到的如何使用Swing定时器获取更多信息。

所有的第二位。没有什么双缓冲你的样品code。

双缓冲,你会使用一个离屏缓冲(如的 的BufferedImage )到屏幕上的内容绘制到之前它呈现在屏幕上。

Thridly,如果你不想实现自己的双缓冲解决方案,我会用的JP​​anel 的JComponent 并把它们添加到 JAppelt 的JComponent (和它的子女)默认支持双缓冲(你不应该直接画到顶层容器,还有以多过甜的东西,你不引擎盖下回事不想有成为负责)。

第四,我会采取一些严重的一次通过图形2D 教程。

更新

下面是我采取的基本理念。请注意,我没有添加播放器,就可以明白这一点。

 公共类百世{    公共静态无效的主要(字串[] args){
        EventQueue.invokeLater(新的Runnable(){
            @覆盖
            公共无效的run(){
                尝试{
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                }赶上(ClassNotFoundException的前){
                }赶上(InstantiationException前){
                }赶上(IllegalAccessException前){
                }赶上(UnsupportedLookAndFeelException前){
                }
                新百世();
            }
        });
    }    公共空间构架(){
        JFrame的帧=新的JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(新的BorderLayout());
        frame.add(新SpacePane());
        frame.pack();
        frame.setLocationRelativeTo(NULL);
        frame.setVisible(真);
    }    保护类SpacePane继承JPanel实现屏幕{        私人的BufferedImage缓冲;        公共SpacePane(){
        }        @覆盖
        公共无效信息addNotify(){
            super.addNotify();
            //我们需要在屏幕面板实际上是在屏幕上...
            EventQueue.invokeLater(新的Runnable(){
                @覆盖
                公共无效的run(){
                    线程线程=新主题(新UpdaterThread(SpacePane.this));
                    thread.setDaemon(真);
                    thread.start();                }
            });
        }        @覆盖
        公共尺寸的get preferredSize(){
            返回新尺寸(600,400);
        }        @覆盖
        保护无效paintComponent(图形G){
            super.paintComponent方法(G);
            如果(缓冲!= NULL){
                Graphics2D的G2D =(Graphics2D的)克;
                g2d.drawImage(缓冲液,0,0,这一点);
            }
        }        @覆盖
        公共无效渲染(最终BufferedImage的图像){
            SwingUtilities.invokeLater(Runnable的新(){
                @覆盖
                公共无效的run(){
                    缓冲=图像;
                    重绘();
                }
            });
        }
    }    保护界面屏幕{
        公共尺寸的getSize();
        公共无效渲染(最终BufferedImage的图像);
    }    保护类UpdaterThread实现Runnable {        私人诠释周期= 0;
        私人BufferedImage的[]缓冲区=新的BufferedImage [2];
        私人屏幕屏幕;
        //外星人的一排...
        私人RowOfAliens rowOfAliens;
        //旋钮调节外星人移动速度
        私人诠释速度= 10;        公共UpdaterThread(屏幕画面){
            this.screen =屏幕;
        }        公共屏幕getScreen(){
            返回屏;
        }        @覆盖
        公共无效的run(){
            //我们只使用1排...
            rowOfAliens =新RowOfAliens();
            rowOfAliens.setLocation(新点(0,0));
            rowOfAliens.setDirection(10);            而(真){                尝试{
                    视频下载(16); // 60帧
                }赶上(InterruptedException的前){
                }                循环++;                //更新脱屏缓冲区...
                BufferedImage的缓冲=的GetBuffer();
                如果(缓冲!= NULL){                    //移动alients ...
                    updateAliens();                    //漆各层
                    INT宽度= buffer.getWidth();
                    INT高度= buffer.getHeight();
                    Graphics2D的G2D = buffer.createGraphics();
                    //你可以在这里画一个空间景观
                    paintBackground(G2D,宽度,高度);
                    //外星人和其他游戏arifcates
                    paintMidground(G2D,宽度,高度);
                    // 特殊效果
                    paintForeground(G2D,宽度,高度);
                    g2d.dispose();                    //发送缓冲区到屏幕
                    paintBuffer(缓冲液);                }            }        }        保护无效updateAliens(){
            屏幕屏幕= getScreen();
            如果(屏幕!= NULL){                //控制着外星人移动速度
                如果(循环%的速度== 0){
                    //获取当前外星人位置和方向...
                    点P = rowOfAliens.getLocation();
                    p.x + = rowOfAliens.getDirection();                    INT屏幕宽度= screen.getSize()宽。
                    INT screenHeight = screen.getSize()的高度。
                    // Boundray检查...
                    如果(p.x + rowOfAliens.getBounds()宽方式&gt;屏幕宽度){
                        p.x =屏幕宽度 - rowOfAliens.getBounds()宽度。
                        //反向
                        rowOfAliens.setDirection(-10);
                        p.y + = 10;
                    }否则如果(p.x℃,){
                        p.x = 0;
                        p.y + = 10;
                        //反向
                        rowOfAliens.setDirection(10);
                    }
                    //设置行的位置......
                    rowOfAliens.setLocation(P);                }            }        }        保护无效paintBackground(Graphics2D的G2D,诠释的宽度,高度INT){
            g2d.setColor(Color.BLACK);
            g2d.fillRect(0,0,宽度,高度);
        }        保护无效paintMidground(Graphics2D的G2D,诠释的宽度,高度INT){
            点P = rowOfAliens.getLocation();
            g2d.translate(p.x,p.y);
            rowOfAliens.paint(G2D);
            g2d.translate(-p.x,-p.y);
        }        保护无效paintForeground(Graphics2D的G2D,诠释的宽度,高度INT){
        }        受保护的BufferedImage的GetBuffer(){
            BufferedImage的缓冲= NULL;            屏幕屏幕= getScreen();
            如果(屏幕!= NULL){
                //确定要使用的缓冲
                INT索引= 0;
                如果(周期%2!= 0){
                    索引= 1;
                }                缓冲区=缓冲区[指数]
                如果(缓冲== NULL || buffer.getWidth()!= screen.getSize()。width方法|| buffer.getHeight()!= screen.getSize()。高度){
                    //创建一个compataible图形对象,所以它会在屏幕上渲染速度更快...
                    GraphicsEnvironment中GE = GraphicsEnvironment.getLocalGraphicsEnvironment();
                    GraphicsDevice的GS = ge.getDefaultScreenDevice();
                    的GraphicsConfiguration GC = gs.getDefaultConfiguration();                    缓冲液= gc.createCompatibleImage(screen.getSize()宽度,screen.getSize()的高度,为Transparency.OPAQUE);
                    缓冲区[指数] =缓冲;
                }            }            返回缓冲区;        }        保护无效paintBuffer(BufferedImage的缓冲区){
            //发送缓冲区到屏幕...
            屏幕屏幕= getScreen();
            如果(屏幕!= NULL){
                screen.renderBuffer(缓冲液);
            }
        }
    }    保护类RowOfAliens {        私人列表&LT;&外星人GT; lstAliens;
        私人点位置;
        私人诠释的方向;
        私人矩形范围;        公共RowOfAliens(){
            lstAliens =新的ArrayList&LT;&外星人GT;(25);
            lstAliens.add(新AlienType1());
            lstAliens.add(新AlienType2());
            lstAliens.add(新AlienType3());
            lstAliens.add(新AlienType4());            的setLocation(新点(0,0));
            //计算行的大小...
            边界=新的Rectangle(Integer.MAX_VALUE的,Integer.MAX_VALUE的,0,0);            INT索引= 0;
            对于(外星人外星人:lstAliens){                矩形盛产= alien.getBounds();
                aBounds.setLocation(alien.getLocation());
                的System.out.println(索引+:+盛产);                bounds.x = Math.min(bounds.x,aBounds.x);
                bounds.y = Math.min(bounds.y,aBounds.y);                bounds.width = Math.max(bounds.width,aBounds.x + aBounds.width);
                bounds.height = Math.max(bounds.height,aBounds.y + aBounds.height);            }            的System.out.println(边界);        }        保护无效漆(Graphics2D的G2D){
            //涂料外星人
            点POS =的getLocation();            对于(外星人外星人:lstAliens){
                g2d.setColor(alien.getColor());
                点P = alien.getLocation();
                //我们需要考虑到该行的当前位置
                //相对于外星人...
                INT XPOS = p.x - pos.x;
                g2d.translate(XPOS,0);
                g2d.fill(外星人);
                g2d.translate(-xPos,0);
            }        }        保护无效layoutRow(){
            //布局基础上,currrent位置有行内的外星人...
            // Techniqually,我们可以抵消为0x0外星人,只是调整
            //每个外国人的宽度x位置和它的差距
            //这将消除需要调整在位置
            //油漆的方法,但干草...
            点P =新的点(的getLocation());
            对于(外星人外星人:lstAliens){
                alien.setLocation(P);
                P =新的点(p.x,p.y);
                。p.x + = alien.getBounds()宽+ 10;
            }        }        公共矩形的getBounds(){
            返回界限;
        }        公共无效的setLocation(点对点){
            如果(位置== NULL ||点== NULL ||(!location.equals(点))){
                位置=点;
                layoutRow();
            }
        }        公共点的getLocation(){
            返回新的点(位置);
        }        公共无效setDirection(int值){
            方向=价值;
        }        公众诠释getDirection(){
            返回的方向;
        }
    }    受保护的抽象类外国人扩展Path2D.Float {        私人点位置;
        私人色彩的颜色;        众彩的getColor(){
            返回的颜色;
        }        公共无效的setColor(色彩的颜色){
            this.color =颜色;
        }        公共无效的setLocation(点位置){
            this.location =位置;
        }        公共点的getLocation(){
            返回的位置;
        }        公共无效addRectangle(INT X,INT Y,INT宽度,高度INT){
            的moveTo(X,Y);
            了lineTo(X +宽度,Y);
            了lineTo(X +宽度,Y +高);
            了lineTo(X,Y +高);
            了lineTo(X,Y);
        }
    }    保护类AlienType1扩展外星人{        公共AlienType1(){
            的setColor(Color.ORANGE);
            addRectangle(30,0,10,10);
            addRectangle(40,0,10,10);
            addRectangle(20,10,10,10);
            addRectangle(30,10,10,10);
            addRectangle(40,10,10,10);
            addRectangle(50,10,10,10);
            addRectangle(10,20,10,10);
            addRectangle(20,20,10,10);
            addRectangle(30,20,10,10);
            addRectangle(40,20,10,10);
            addRectangle(50,20,10,10);
            addRectangle(60,20,10,10);
            addRectangle(0,30,10,10);
            addRectangle(10,30,10,10);
            addRectangle(30,30,10,10);
            addRectangle(40,30,10,10);
            addRectangle(60,30,10,10);
            addRectangle(70,30,10,10);
            addRectangle(0,40,10,10);
            addRectangle(10,40,10,10);
            addRectangle(20,40,10,10);
            addRectangle(30,40,10,10);
            addRectangle(40,40,10,10);
            addRectangle(50,40,10,10);
            addRectangle(60,40,10,10);
            addRectangle(70,40,10,10);
            addRectangle(20,50,10,10);
            addRectangle(50,50,10,10);
            addRectangle(10,60,10,10);
            addRectangle(30,60,10,10);
            addRectangle(40,60,10,10);
            addRectangle(60,60,10,10);
            addRectangle(0,70,10,10);
            addRectangle(20,70,10,10);
            addRectangle(50,70,10,10);
            addRectangle(70,70,10,10);
            调用closePath();
        }
    }    保护类AlienType2扩展外星人{        公共AlienType2(){
            的setColor(Color.RED);
            addRectangle(20,0,10,10);
            addRectangle(80,0,10,10);
            addRectangle(0,10,10,10);
            addRectangle(30,10,10,10);
            addRectangle(70,10,10,10);
            addRectangle(100,10,10,10);
            addRectangle(0,20,10,10);
            addRectangle(20,20,10,10);
            addRectangle(30,20,10,10);
            addRectangle(40,20,10,10);
            addRectangle(50,20,10,10);
            addRectangle(60,20,10,10);
            addRectangle(70,20,10,10);
            addRectangle(80,20,10,10);
            addRectangle(100,20,10,10);
            addRectangle(0,30,10,10);
            addRectangle(10,30,10,10);
            addRectangle(20,30,10,10);
            addRectangle(40,30,10,10);
            addRectangle(50,30,10,10);
            addRectangle(60,30,10,10);
            addRectangle(80,30,10,10);
            addRectangle(90,30,10,10);
            addRectangle(100,30,10,10);
            addRectangle(0,40,10,10);
            addRectangle(10,40,10,10);
            addRectangle(20,40,10,10);
            addRectangle(30,40,10,10);
            addRectangle(40,40,10,10);
            addRectangle(50,40,10,10);
            addRectangle(60,40,10,10);
            addRectangle(70,40,10,10);
            addRectangle(80,40,10,10);
            addRectangle(90,40,10,10);
            addRectangle(100,40,10,10);
            addRectangle(10,50,10,10);
            addRectangle(20,50,10,10);
            addRectangle(30,50,10,10);
            addRectangle(40,50,10,10);
            addRectangle(50,50,10,10);
            addRectangle(60,50,10,10);
            addRectangle(70,50,10,10);
            addRectangle(80,50,10,10);
            addRectangle(90,50,10,10);
            addRectangle(20,60,10,10);
            addRectangle(80,60,10,10);
            addRectangle(10,70,10,10);
            addRectangle(90,70,10,10);
            调用closePath();
        }
    }    保护类AlienType3扩展外星人{        公共AlienType3(){
            的setColor(Color.YELLOW);
            addRectangle(20,0,10,10);
            addRectangle(20,0,10,10);
            addRectangle(80,0,10,10);
            addRectangle(30,10,10,10);
            addRectangle(70,10,10,10);
            addRectangle(20,20,10,10);
            addRectangle(30,20,10,10);
            addRectangle(40,20,10,10);
            addRectangle(50,20,10,10);
            addRectangle(60,20,10,10);
            addRectangle(70,20,10,10);
            addRectangle(80,20,10,10);
            addRectangle(10,30,10,10);
            addRectangle(20,30,10,10);
            addRectangle(40,30,10,10);
            addRectangle(50,30,10,10);
            addRectangle(60,30,10,10);
            addRectangle(80,30,10,10);
            addRectangle(90,30,10,10);
            addRectangle(0,40,10,10);
            addRectangle(10,40,10,10);
            addRectangle(20,40,10,10);
            addRectangle(30,40,10,10);
            addRectangle(40,40,10,10);
            addRectangle(50,40,10,10);
            addRectangle(60,40,10,10);
            addRectangle(70,40,10,10);
            addRectangle(80,40,10,10);
            addRectangle(90,40,10,10);
            addRectangle(100,40,10,10);
            addRectangle(0,50,10,10);
            addRectangle(20,50,10,10);
            addRectangle(30,50,10,10);
            addRectangle(40,50,10,10);
            addRectangle(50,50,10,10);
            addRectangle(60,50,10,10);
            addRectangle(70,50,10,10);
            addRectangle(80,50,10,10);
            addRectangle(100,50,10,10);
            addRectangle(0,60,10,10);
            addRectangle(20,60,10,10);
            addRectangle(80,60,10,10);
            addRectangle(100,60,10,10);
            addRectangle(30,70,10,10);
            addRectangle(40,70,10,10);
            addRectangle(60,70,10,10);
            addRectangle(70,70,10,10);
            调用closePath();
        }
    }    保护类AlienType4扩展外星人{        公共AlienType4(){
            的setColor(Color.GREEN);
            addRectangle(50,0,10,10);
            addRectangle(60,0,10,10);
            addRectangle(70,0,10,10);
            addRectangle(80,0,10,10);
            addRectangle(90,0,10,10);
            addRectangle(100,0,10,10);
            addRectangle(30,10,10,10);
            addRectangle(40,10,10,10);
            addRectangle(50,10,10,10);
            addRectangle(60,10,10,10);
            addRectangle(70,10,10,10);
            addRectangle(80,10,10,10);
            addRectangle(90,10,10,10);
            addRectangle(100,10,10,10);
            addRectangle(110,10,10,10);
            addRectangle(120,10,10,10);
            addRectangle(20,20,10,10);
            addRectangle(30,20,10,10);
            addRectangle(40,20,10,10);
            addRectangle(50,20,10,10);
            addRectangle(60,20,10,10);
            addRectangle(70,20,10,10);
            addRectangle(80,20,10,10);
            addRectangle(90,20,10,10);
            addRectangle(100,20,10,10);
            addRectangle(110,20,10,10);
            addRectangle(120,20,10,10);
            addRectangle(130,20,10,10);
            addRectangle(10,30,10,10);
            addRectangle(20,30,10,10);
            addRectangle(40,30,10,10);
            addRectangle(50,30,10,10);
            addRectangle(70,30,10,10);
            addRectangle(80,30,10,10);
            addRectangle(100,30,10,10);
            addRectangle(110,30,10,10);
            addRectangle(130,30,10,10);
            addRectangle(140,30,10,10);
            addRectangle(0,40,10,10);
            addRectangle(10,40,10,10);
            addRectangle(20,40,10,10);
            addRectangle(30,40,10,10);
            addRectangle(40,40,10,10);
            addRectangle(50,40,10,10);
            addRectangle(60,40,10,10);
            addRectangle(70,40,10,10);
            addRectangle(80,40,10,10);
            addRectangle(90,40,10,10);
            addRectangle(100,40,10,10);
            addRectangle(110,40,10,10);
            addRectangle(120,40,10,10);
            addRectangle(130,40,10,10);
            addRectangle(140,40,10,10);
            addRectangle(150,40,10,10);
            addRectangle(20,50,10,10);
            addRectangle(30,50,10,10);
            addRectangle(40,50,10,10);
            addRectangle(70,50,10,10);
            addRectangle(80,50,10,10);
            addRectangle(110,50,10,10);
            addRectangle(120,50,10,10);
            addRectangle(130,50,10,10);
            addRectangle(30,60,10,10);
            addRectangle(120,60,10,10);
            调用closePath();
        }
    }
}

this is my code actually it's just a moving space invader game. i search the internet for the animation i have tried the double buffering, it gets rid the flickering but its ruining the entire output. it also has java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. this is so hard...

import javax.sound.sampled.*;
import java.applet.*;
import java.awt.*;

public class SpaceInvaders extends Applet implements Runnable{


AudioClip soundFile1; 
int Xposition=500,Xposition1=-500,Yposition=15;
Thread runner;

public void start()
{
if (runner == null);
{
runner = new Thread(this);
runner.start();
}
}

public void stop()
{
if (runner != null);
{
runner.stop();
runner = null;

}
}

public void run()
{
while(true)
{
setBackground(Color.black);
repaint();
try {Thread.sleep(20);}
catch(InterruptedException e) { }
}
}

public void init() 
{ 
soundFile1 = getAudioClip(getDocumentBase(),"si.au"); 
//soundFile1.play(); 
soundFile1.loop();
}   
public void paint( Graphics g ) {   
  g.setColor( Color.orange );
  g.fillRect(Xposition+50,10,10,10);
  g.fillRect(Xposition+60,10,10,10);
  g.fillRect(Xposition+40,20,10,10);
  g.fillRect(Xposition+50,20,10,10);
  g.fillRect(Xposition+60,20,10,10);
  g.fillRect(Xposition+70,20,10,10);
  g.fillRect(Xposition+30,30,10,10);
  g.fillRect(Xposition+40,30,10,10);
  g.fillRect(Xposition+50,30,10,10);
  g.fillRect(Xposition+60,30,10,10);
  g.fillRect(Xposition+70,30,10,10);
  g.fillRect(Xposition+80,30,10,10);
  g.fillRect(Xposition+20,40,10,10);
  g.fillRect(Xposition+30,40,10,10);
  g.fillRect(Xposition+50,40,10,10);
  g.fillRect(Xposition+60,40,10,10);
  g.fillRect(Xposition+80,40,10,10);
  g.fillRect(Xposition+90,40,10,10);
  g.fillRect(Xposition+20,50,10,10);
  g.fillRect(Xposition+30,50,10,10);
  g.fillRect(Xposition+40,50,10,10);
  g.fillRect(Xposition+50,50,10,10);
  g.fillRect(Xposition+60,50,10,10);
  g.fillRect(Xposition+70,50,10,10);
  g.fillRect(Xposition+80,50,10,10);
  g.fillRect(Xposition+90,50,10,10);
  g.fillRect(Xposition+40,60,10,10);
  g.fillRect(Xposition+70,60,10,10);
  g.fillRect(Xposition+30,70,10,10);
  g.fillRect(Xposition+50,70,10,10);
  g.fillRect(Xposition+60,70,10,10);
  g.fillRect(Xposition+80,70,10,10);
  g.fillRect(Xposition+20,80,10,10);
  g.fillRect(Xposition+40,80,10,10);
  g.fillRect(Xposition+70,80,10,10);
  g.fillRect(Xposition+90,80,10,10);

  g.setColor(Color.red);
  g.fillRect(Xposition+140,10,10,10);
  g.fillRect(Xposition+200,10,10,10);
  g.fillRect(Xposition+120,20,10,10);
  g.fillRect(Xposition+150,20,10,10);
  g.fillRect(Xposition+190,20,10,10);
  g.fillRect(Xposition+220,20,10,10);
  g.fillRect(Xposition+120,30,10,10);
  g.fillRect(Xposition+140,30,10,10);
  g.fillRect(Xposition+150,30,10,10);
  g.fillRect(Xposition+160,30,10,10);
  g.fillRect(Xposition+170,30,10,10);
  g.fillRect(Xposition+180,30,10,10);
  g.fillRect(Xposition+190,30,10,10);
  g.fillRect(Xposition+200,30,10,10);
  g.fillRect(Xposition+220,30,10,10);
  g.fillRect(Xposition+120,40,10,10);
  g.fillRect(Xposition+130,40,10,10);
  g.fillRect(Xposition+140,40,10,10);
  g.fillRect(Xposition+160,40,10,10);
  g.fillRect(Xposition+170,40,10,10);
  g.fillRect(Xposition+180,40,10,10);
  g.fillRect(Xposition+200,40,10,10);
  g.fillRect(Xposition+210,40,10,10);
  g.fillRect(Xposition+220,40,10,10);
  g.fillRect(Xposition+120,50,10,10);
  g.fillRect(Xposition+130,50,10,10);
  g.fillRect(Xposition+140,50,10,10);
  g.fillRect(Xposition+150,50,10,10);
  g.fillRect(Xposition+160,50,10,10);
  g.fillRect(Xposition+170,50,10,10);
  g.fillRect(Xposition+180,50,10,10);
  g.fillRect(Xposition+190,50,10,10);
  g.fillRect(Xposition+200,50,10,10);
  g.fillRect(Xposition+210,50,10,10);
  g.fillRect(Xposition+220,50,10,10);
  g.fillRect(Xposition+130,60,10,10);
  g.fillRect(Xposition+140,60,10,10);
  g.fillRect(Xposition+150,60,10,10);
  g.fillRect(Xposition+160,60,10,10);
  g.fillRect(Xposition+170,60,10,10);
  g.fillRect(Xposition+180,60,10,10);
  g.fillRect(Xposition+190,60,10,10);
  g.fillRect(Xposition+200,60,10,10);
  g.fillRect(Xposition+210,60,10,10);
  g.fillRect(Xposition+140,70,10,10);
  g.fillRect(Xposition+200,70,10,10);
  g.fillRect(Xposition+130,80,10,10);
  g.fillRect(Xposition+210,80,10,10);



  g.setColor(Color.blue);
  g.fillRect(Xposition+280,10,10,10);
  g.fillRect(Xposition+290,10,10,10);
  g.fillRect(Xposition+270,20,10,10);
  g.fillRect(Xposition+280,20,10,10);           
  g.fillRect(Xposition+290,20,10,10);
  g.fillRect(Xposition+300,20,10,10);
  g.fillRect(Xposition+260,30,10,10);
  g.fillRect(Xposition+270,30,10,10);
  g.fillRect(Xposition+280,30,10,10);
  g.fillRect(Xposition+290,30,10,10);
  g.fillRect(Xposition+300,30,10,10);
  g.fillRect(Xposition+310,30,10,10);
  g.fillRect(Xposition+250,40,10,10);
  g.fillRect(Xposition+260,40,10,10);
  g.fillRect(Xposition+280,40,10,10);
  g.fillRect(Xposition+290,40,10,10);
  g.fillRect(Xposition+310,40,10,10);
  g.fillRect(Xposition+320,40,10,10);
  g.fillRect(Xposition+250,50,10,10);
  g.fillRect(Xposition+260,50,10,10);
  g.fillRect(Xposition+270,50,10,10);
  g.fillRect(Xposition+280,50,10,10);
  g.fillRect(Xposition+290,50,10,10);
  g.fillRect(Xposition+300,50,10,10);
  g.fillRect(Xposition+310,50,10,10);
  g.fillRect(Xposition+320,50,10,10);               //20=250 30=260 40=270 50=280 60=290 70=300 80=310 90=320
  g.fillRect(Xposition+260,60,10,10);
  g.fillRect(Xposition+280,60,10,10);
  g.fillRect(Xposition+290,60,10,10);
  g.fillRect(Xposition+310,60,10,10);
  g.fillRect(Xposition+250,70,10,10);
  g.fillRect(Xposition+320,70,10,10);
  g.fillRect(Xposition+260,80,10,10);
  g.fillRect(Xposition+310,80,10,10);


  g.setColor(Color.yellow);
  g.fillRect(Xposition+370,10,10,10);           
  g.fillRect(Xposition+430,10,10,10);
  g.fillRect(Xposition+380,20,10,10);
  g.fillRect(Xposition+420,20,10,10);
  g.fillRect(Xposition+370,30,10,10);
  g.fillRect(Xposition+380,30,10,10);
  g.fillRect(Xposition+390,30,10,10);
  g.fillRect(Xposition+400,30,10,10);
  g.fillRect(Xposition+410,30,10,10);
  g.fillRect(Xposition+420,30,10,10);
  g.fillRect(Xposition+430,30,10,10);
  g.fillRect(Xposition+360,40,10,10);
  g.fillRect(Xposition+370,40,10,10);
  g.fillRect(Xposition+390,40,10,10);
  g.fillRect(Xposition+400,40,10,10);
  g.fillRect(Xposition+410,40,10,10);
  g.fillRect(Xposition+430,40,10,10);
  g.fillRect(Xposition+440,40,10,10);
  g.fillRect(Xposition+350,50,10,10);
  g.fillRect(Xposition+360,50,10,10);
  g.fillRect(Xposition+370,50,10,10);
  g.fillRect(Xposition+380,50,10,10);
  g.fillRect(Xposition+390,50,10,10);
  g.fillRect(Xposition+400,50,10,10);
  g.fillRect(Xposition+410,50,10,10);
  g.fillRect(Xposition+420,50,10,10);
  g.fillRect(Xposition+430,50,10,10);
  g.fillRect(Xposition+440,50,10,10);
  g.fillRect(Xposition+450,50,10,10);       //120=350 130=360 140=370 150=380 160=390 170=400 180=410 190=420 200=430 210=440 220=450
  g.fillRect(Xposition+350,60,10,10);
  g.fillRect(Xposition+370,60,10,10);
  g.fillRect(Xposition+380,60,10,10);
  g.fillRect(Xposition+390,60,10,10);
  g.fillRect(Xposition+400,60,10,10);
  g.fillRect(Xposition+410,60,10,10);
  g.fillRect(Xposition+420,60,10,10);
  g.fillRect(Xposition+430,60,10,10);
  g.fillRect(Xposition+450,60,10,10);
  g.fillRect(Xposition+350,70,10,10);
  g.fillRect(Xposition+370,70,10,10);
  g.fillRect(Xposition+430,70,10,10);
  g.fillRect(Xposition+450,70,10,10);
  g.fillRect(Xposition+380,80,10,10);
  g.fillRect(Xposition+390,80,10,10);
  g.fillRect(Xposition+410,80,10,10);
  g.fillRect(Xposition+420,80,10,10);


   Xposition--;
     if (Xposition < -500)
  {
Xposition = 500;
}

 g.setColor(Color.green);
 g.fillRect(Xposition1+230,130,10,10);
 g.fillRect(Xposition1+240,130,10,10);
 g.fillRect(Xposition1+250,130,10,10);
 g.fillRect(Xposition1+260,130,10,10);
 g.fillRect(Xposition1+270,130,10,10);
 g.fillRect(Xposition1+280,130,10,10);  
 g.fillRect(Xposition1+210,140,10,10);
 g.fillRect(Xposition1+220,140,10,10);
 g.fillRect(Xposition1+230,140,10,10);
 g.fillRect(Xposition1+240,140,10,10);
   g.fillRect(Xposition1+250,140,10,10);
  g.fillRect(Xposition1+260,140,10,10);
  g.fillRect(Xposition1+270,140,10,10);
  g.fillRect(Xposition1+280,140,10,10);
  g.fillRect(Xposition1+290,140,10,10);
  g.fillRect(Xposition1+300,140,10,10);
  g.fillRect(Xposition1+200,150,10,10);
 g.fillRect(Xposition1+210,150,10,10);
  g.fillRect(Xposition1+220,150,10,10);
 g.fillRect(Xposition1+230,150,10,10);
  g.fillRect(Xposition1+240,150,10,10);
   g.fillRect(Xposition1+250,150,10,10);
g.fillRect(Xposition1+260,150,10,10);
g.fillRect(Xposition1+270,150,10,10);
g.fillRect(Xposition1+280,150,10,10);
g.fillRect(Xposition1+290,150,10,10);
g.fillRect(Xposition1+300,150,10,10);
g.fillRect(Xposition1+310,150,10,10);
g.fillRect(Xposition1+190,160,10,10);
g.fillRect(Xposition1+200,160,10,10);
g.fillRect(Xposition1+220,160,10,10);
g.fillRect(Xposition1+230,160,10,10);
g.fillRect(Xposition1+250,160,10,10);
g.fillRect(Xposition1+260,160,10,10);
g.fillRect(Xposition1+280,160,10,10);
g.fillRect(Xposition1+290,160,10,10);
g.fillRect(Xposition1+310,160,10,10);
g.fillRect(Xposition1+320,160,10,10);
g.fillRect(Xposition1+180,170,10,10);
g.fillRect(Xposition1+190,170,10,10);
g.fillRect(Xposition1+200,170,10,10);
g.fillRect(Xposition1+210,170,10,10);
g.fillRect(Xposition1+220,170,10,10);
g.fillRect(Xposition1+230,170,10,10);
g.fillRect(Xposition1+240,170,10,10);
g.fillRect(Xposition1+250,170,10,10);
g.fillRect(Xposition1+260,170,10,10);
g.fillRect(Xposition1+270,170,10,10);
g.fillRect(Xposition1+280,170,10,10);
g.fillRect(Xposition1+290,170,10,10);
g.fillRect(Xposition1+300,170,10,10);
g.fillRect(Xposition1+310,170,10,10);
g.fillRect(Xposition1+320,170,10,10);
g.fillRect(Xposition1+330,170,10,10);
g.fillRect(Xposition1+200,180,10,10);
g.fillRect(Xposition1+210,180,10,10);
g.fillRect(Xposition1+220,180,10,10);
g.fillRect(Xposition1+250,180,10,10);
g.fillRect(Xposition1+260,180,10,10);
g.fillRect(Xposition1+290,180,10,10);
g.fillRect(Xposition1+300,180,10,10);
g.fillRect(Xposition1+310,180,10,10);
g.fillRect(Xposition1+210,190,10,10);
g.fillRect(Xposition1+300,190,10,10);


Xposition1++;
if (Xposition1 > 500)
{
    Xposition1 = -500;
}

Yposition--;
if (Yposition > 500)
{
    Yposition = -500;
}

g.setColor(Color.magenta);
g.fillRect(260,Yposition+240,10,10);
g.fillRect(260,Yposition+250,10,10);

g.setColor(Color.white);

g.fillRect(260,310,10,10);
g.fillRect(250,320,10,10);
g.fillRect(260,320,10,10);
g.fillRect(270,320,10,10);
g.fillRect(250,330,10,10);
g.fillRect(260,330,10,10);
g.fillRect(270,330,10,10);
g.fillRect(200,340,10,10);
g.fillRect(210,340,10,10);
g.fillRect(220,340,10,10);
g.fillRect(230,340,10,10);
g.fillRect(240,340,10,10);
g.fillRect(250,340,10,10);
g.fillRect(260,340,10,10);
g.fillRect(270,340,10,10);
g.fillRect(280,340,10,10);
g.fillRect(290,340,10,10);
g.fillRect(300,340,10,10);
g.fillRect(310,340,10,10);
g.fillRect(320,340,10,10);
g.fillRect(190,350,10,10);
g.fillRect(200,350,10,10);
g.fillRect(210,350,10,10);
g.fillRect(220,350,10,10);
g.fillRect(230,350,10,10);
g.fillRect(240,350,10,10);
g.fillRect(250,350,10,10);
g.fillRect(260,350,10,10);
g.fillRect(270,350,10,10);
g.fillRect(280,350,10,10);
g.fillRect(290,350,10,10);
g.fillRect(300,350,10,10);
g.fillRect(310,350,10,10);
g.fillRect(320,350,10,10);
g.fillRect(330,350,10,10);
g.fillRect(190,360,10,10);
g.fillRect(200,360,10,10);
g.fillRect(210,360,10,10);
 g.fillRect(220,360,10,10);
g.fillRect(230,360,10,10);
g.fillRect(240,360,10,10);
g.fillRect(250,360,10,10);
g.fillRect(260,360,10,10);
g.fillRect(270,360,10,10);
g.fillRect(280,360,10,10);
g.fillRect(290,360,10,10);
g.fillRect(300,360,10,10);
g.fillRect(310,360,10,10);
g.fillRect(320,360,10,10);
g.fillRect(330,360,10,10);
g.fillRect(190,370,10,10);
g.fillRect(200,370,10,10);
g.fillRect(210,370,10,10);
g.fillRect(220,370,10,10);
g.fillRect(230,370,10,10);
g.fillRect(240,370,10,10);
g.fillRect(250,370,10,10);
g.fillRect(260,370,10,10);
g.fillRect(270,370,10,10);
g.fillRect(280,370,10,10);
g.fillRect(290,370,10,10);
g.fillRect(300,370,10,10);
g.fillRect(310,370,10,10);
g.fillRect(320,370,10,10);
g.fillRect(330,370,10,10);
g.fillRect(190,380,10,10);
g.fillRect(200,380,10,10);
g.fillRect(210,380,10,10);
g.fillRect(220,380,10,10);
g.fillRect(230,380,10,10);
g.fillRect(240,380,10,10);
g.fillRect(250,380,10,10);
g.fillRect(260,380,10,10);
g.fillRect(270,380,10,10);
g.fillRect(280,380,10,10);
g.fillRect(290,380,10,10);
g.fillRect(300,380,10,10);
g.fillRect(310,380,10,10);
g.fillRect(320,380,10,10);
g.fillRect(330,380,10,10);




}
public static void main(String[] args)
{

 }
}

First of all, don't do this.

public void run() {
    while (true) {
        setBackground(Color.black);
        repaint();
        try {
            Thread.sleep(20);
        } catch (InterruptedException e) {
        }
    }
}

While I appricate that this is being run from inside a Runnable context, you are effecting the UI from outside the Event Dispatching Thread, which is NEVER a good idea.

You're better of using a javax.swing.Timer, see How to use Swing Timers for more info.

Second of all. There is nothing double buffered about your sample code.

Double buffering would have you using an off-screen buffered (such as a BufferedImage) to draw the contents of the screen to before it's rendered to the screen.

Thridly, if you don't want to implement your own double buffering solution, I would use a JPanel or JComponent and add them to a JAppelt. JComponent (and it's children) support double buffering by default (you shouldn't paint directly to a top level container, there's to much icky stuff going on under the hood you don't want to have to become responsible for).

Fourthly, I would take some serious time to read through the Graphics 2D tutorial.

UPDATE

Here's my take on the basic idea. Note, I've not added the player, you can figure that out.

public class SpaceFrame {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException ex) {
                } catch (InstantiationException ex) {
                } catch (IllegalAccessException ex) {
                } catch (UnsupportedLookAndFeelException ex) {
                }
                new SpaceFrame();
            }
        });
    }

    public SpaceFrame() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());
        frame.add(new SpacePane());
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    protected class SpacePane extends JPanel implements Screen {

        private BufferedImage buffer;

        public SpacePane() {
        }

        @Override
        public void addNotify() {
            super.addNotify();
            // We need to make that the screen pane is actually on the screen...
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    Thread thread = new Thread(new UpdaterThread(SpacePane.this));
                    thread.setDaemon(true);
                    thread.start();

                }
            });
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(600, 400);
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (buffer != null) {
                Graphics2D g2d = (Graphics2D) g;
                g2d.drawImage(buffer, 0, 0, this);
            }
        }

        @Override
        public void renderBuffer(final BufferedImage image) {
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    buffer = image;
                    repaint();
                }
            });
        }
    }

    protected interface Screen {
        public Dimension getSize();
        public void renderBuffer(final BufferedImage image);
    }

    protected class UpdaterThread implements Runnable {

        private int cycle = 0;
        private BufferedImage[] buffers = new BufferedImage[2];
        private Screen screen;
        // A row of aliens...
        private RowOfAliens rowOfAliens;
        // Adjusts the speed at which the aliens move
        private int speed = 10;

        public UpdaterThread(Screen screen) {
            this.screen = screen;
        }

        public Screen getScreen() {
            return screen;
        }

        @Override
        public void run() {
            // We're only using 1 row...
            rowOfAliens = new RowOfAliens();
            rowOfAliens.setLocation(new Point(0, 0));
            rowOfAliens.setDirection(10);

            while (true) {

                try {
                    Thread.sleep(16); // 60 fps
                } catch (InterruptedException ex) {
                }

                cycle++;

                // Update the offscreen buffer...
                BufferedImage buffer = getBuffer();
                if (buffer != null) {

                    // Move the alients...
                    updateAliens();

                    // Paint the various layers
                    int width = buffer.getWidth();
                    int height = buffer.getHeight();
                    Graphics2D g2d = buffer.createGraphics();
                    // You could paint a space scape here
                    paintBackground(g2d, width, height);
                    // The aliens and other game arifcates
                    paintMidground(g2d, width, height);
                    // Special effects
                    paintForeground(g2d, width, height);
                    g2d.dispose();

                    // Send the buffer to the screen
                    paintBuffer(buffer);

                }

            }

        }

        protected void updateAliens() {
            Screen screen = getScreen();
            if (screen != null) {

                // Controls the speed at which the aliens move
                if (cycle % speed == 0) {
                    // Get the aliens current location and direction...
                    Point p = rowOfAliens.getLocation();
                    p.x += rowOfAliens.getDirection();

                    int screenWidth = screen.getSize().width;
                    int screenHeight = screen.getSize().height;
                    // Boundray check...
                    if (p.x + rowOfAliens.getBounds().width > screenWidth) {
                        p.x = screenWidth - rowOfAliens.getBounds().width;
                        // Reverse direction
                        rowOfAliens.setDirection(-10);
                        p.y += 10;
                    } else if (p.x < 0) {
                        p.x = 0;
                        p.y += 10;
                        // Reverse direction
                        rowOfAliens.setDirection(10);
                    }
                    // Set the location of the row...
                    rowOfAliens.setLocation(p);

                }

            }

        }

        protected void paintBackground(Graphics2D g2d, int width, int height) {
            g2d.setColor(Color.BLACK);
            g2d.fillRect(0, 0, width, height);
        }

        protected void paintMidground(Graphics2D g2d, int width, int height) {
            Point p = rowOfAliens.getLocation();
            g2d.translate(p.x, p.y);
            rowOfAliens.paint(g2d);
            g2d.translate(-p.x, -p.y);
        }

        protected void paintForeground(Graphics2D g2d, int width, int height) {
        }

        protected BufferedImage getBuffer() {
            BufferedImage buffer = null;

            Screen screen = getScreen();
            if (screen != null) {
                // Determine which buffer to use
                int index = 0;
                if (cycle % 2 != 0) {
                    index = 1;
                }

                buffer = buffers[index];
                if (buffer == null || buffer.getWidth() != screen.getSize().width || buffer.getHeight() != screen.getSize().height) {
                    // Create a compataible graphics object, so it will render faster on the screen...
                    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
                    GraphicsDevice gs = ge.getDefaultScreenDevice();
                    GraphicsConfiguration gc = gs.getDefaultConfiguration();

                    buffer = gc.createCompatibleImage(screen.getSize().width, screen.getSize().height, Transparency.OPAQUE);
                    buffers[index] = buffer;
                }

            }

            return buffer;

        }

        protected void paintBuffer(BufferedImage buffer) {
            // Send the buffer to the screen...
            Screen screen = getScreen();
            if (screen != null) {
                screen.renderBuffer(buffer);
            }
        }
    }

    protected class RowOfAliens {

        private List<Alien> lstAliens;
        private Point location;
        private int direction;
        private Rectangle bounds;

        public RowOfAliens() {
            lstAliens = new ArrayList<Alien>(25);
            lstAliens.add(new AlienType1());
            lstAliens.add(new AlienType2());
            lstAliens.add(new AlienType3());
            lstAliens.add(new AlienType4());

            setLocation(new Point(0, 0));
            // Calculate the size of the row...
            bounds = new Rectangle(Integer.MAX_VALUE, Integer.MAX_VALUE, 0, 0);

            int index = 0;
            for (Alien alien : lstAliens) {

                Rectangle aBounds = alien.getBounds();
                aBounds.setLocation(alien.getLocation());
                System.out.println(index + ": " + aBounds);

                bounds.x = Math.min(bounds.x, aBounds.x);
                bounds.y = Math.min(bounds.y, aBounds.y);

                bounds.width = Math.max(bounds.width, aBounds.x + aBounds.width);
                bounds.height = Math.max(bounds.height, aBounds.y + aBounds.height);

            }

            System.out.println(bounds);

        }

        protected void paint(Graphics2D g2d) {
            // Paint the aliens
            Point pos = getLocation();

            for (Alien alien : lstAliens) {
                g2d.setColor(alien.getColor());
                Point p = alien.getLocation();
                // We need to take into account the current location of the row
                // in relation to the alien...
                int xPos = p.x - pos.x;
                g2d.translate(xPos, 0);
                g2d.fill(alien);
                g2d.translate(-xPos, 0);
            }

        }

        protected void layoutRow() {
            // Layout the aliens within there row based on the currrent location...
            // Techniqually, we could offset the aliens at 0x0 and simply adjust the
            // the x position by the width of each alien and it's gap
            // This would eliminate the need to adjust the position in the
            // paint method, but hay...
            Point p = new Point(getLocation());
            for (Alien alien : lstAliens) {
                alien.setLocation(p);
                p = new Point(p.x, p.y);
                p.x += alien.getBounds().width + 10;
            }

        }

        public Rectangle getBounds() {
            return bounds;
        }

        public void setLocation(Point point) {
            if (location == null || point == null || (!location.equals(point))) {
                location = point;
                layoutRow();
            }
        }

        public Point getLocation() {
            return new Point(location);
        }

        public void setDirection(int value) {
            direction = value;
        }

        public int getDirection() {
            return direction;
        }
    }

    protected abstract class Alien extends Path2D.Float {

        private Point location;
        private Color color;

        public Color getColor() {
            return color;
        }

        public void setColor(Color color) {
            this.color = color;
        }

        public void setLocation(Point location) {
            this.location = location;
        }

        public Point getLocation() {
            return location;
        }

        public void addRectangle(int x, int y, int width, int height) {
            moveTo(x, y);
            lineTo(x + width, y);
            lineTo(x + width, y + height);
            lineTo(x, y + height);
            lineTo(x, y);
        }
    }

    protected class AlienType1 extends Alien {

        public AlienType1() {
            setColor(Color.ORANGE);
            addRectangle(30, 0, 10, 10);
            addRectangle(40, 0, 10, 10);
            addRectangle(20, 10, 10, 10);
            addRectangle(30, 10, 10, 10);
            addRectangle(40, 10, 10, 10);
            addRectangle(50, 10, 10, 10);
            addRectangle(10, 20, 10, 10);
            addRectangle(20, 20, 10, 10);
            addRectangle(30, 20, 10, 10);
            addRectangle(40, 20, 10, 10);
            addRectangle(50, 20, 10, 10);
            addRectangle(60, 20, 10, 10);
            addRectangle(0, 30, 10, 10);
            addRectangle(10, 30, 10, 10);
            addRectangle(30, 30, 10, 10);
            addRectangle(40, 30, 10, 10);
            addRectangle(60, 30, 10, 10);
            addRectangle(70, 30, 10, 10);
            addRectangle(0, 40, 10, 10);
            addRectangle(10, 40, 10, 10);
            addRectangle(20, 40, 10, 10);
            addRectangle(30, 40, 10, 10);
            addRectangle(40, 40, 10, 10);
            addRectangle(50, 40, 10, 10);
            addRectangle(60, 40, 10, 10);
            addRectangle(70, 40, 10, 10);
            addRectangle(20, 50, 10, 10);
            addRectangle(50, 50, 10, 10);
            addRectangle(10, 60, 10, 10);
            addRectangle(30, 60, 10, 10);
            addRectangle(40, 60, 10, 10);
            addRectangle(60, 60, 10, 10);
            addRectangle(0, 70, 10, 10);
            addRectangle(20, 70, 10, 10);
            addRectangle(50, 70, 10, 10);
            addRectangle(70, 70, 10, 10);
            closePath();
        }
    }

    protected class AlienType2 extends Alien {

        public AlienType2() {
            setColor(Color.RED);
            addRectangle(20, 0, 10, 10);
            addRectangle(80, 0, 10, 10);
            addRectangle(0, 10, 10, 10);
            addRectangle(30, 10, 10, 10);
            addRectangle(70, 10, 10, 10);
            addRectangle(100, 10, 10, 10);
            addRectangle(0, 20, 10, 10);
            addRectangle(20, 20, 10, 10);
            addRectangle(30, 20, 10, 10);
            addRectangle(40, 20, 10, 10);
            addRectangle(50, 20, 10, 10);
            addRectangle(60, 20, 10, 10);
            addRectangle(70, 20, 10, 10);
            addRectangle(80, 20, 10, 10);
            addRectangle(100, 20, 10, 10);
            addRectangle(0, 30, 10, 10);
            addRectangle(10, 30, 10, 10);
            addRectangle(20, 30, 10, 10);
            addRectangle(40, 30, 10, 10);
            addRectangle(50, 30, 10, 10);
            addRectangle(60, 30, 10, 10);
            addRectangle(80, 30, 10, 10);
            addRectangle(90, 30, 10, 10);
            addRectangle(100, 30, 10, 10);
            addRectangle(0, 40, 10, 10);
            addRectangle(10, 40, 10, 10);
            addRectangle(20, 40, 10, 10);
            addRectangle(30, 40, 10, 10);
            addRectangle(40, 40, 10, 10);
            addRectangle(50, 40, 10, 10);
            addRectangle(60, 40, 10, 10);
            addRectangle(70, 40, 10, 10);
            addRectangle(80, 40, 10, 10);
            addRectangle(90, 40, 10, 10);
            addRectangle(100, 40, 10, 10);
            addRectangle(10, 50, 10, 10);
            addRectangle(20, 50, 10, 10);
            addRectangle(30, 50, 10, 10);
            addRectangle(40, 50, 10, 10);
            addRectangle(50, 50, 10, 10);
            addRectangle(60, 50, 10, 10);
            addRectangle(70, 50, 10, 10);
            addRectangle(80, 50, 10, 10);
            addRectangle(90, 50, 10, 10);
            addRectangle(20, 60, 10, 10);
            addRectangle(80, 60, 10, 10);
            addRectangle(10, 70, 10, 10);
            addRectangle(90, 70, 10, 10);
            closePath();
        }
    }

    protected class AlienType3 extends Alien {

        public AlienType3() {
            setColor(Color.YELLOW);
            addRectangle(20, 0, 10, 10);
            addRectangle(20, 0, 10, 10);
            addRectangle(80, 0, 10, 10);
            addRectangle(30, 10, 10, 10);
            addRectangle(70, 10, 10, 10);
            addRectangle(20, 20, 10, 10);
            addRectangle(30, 20, 10, 10);
            addRectangle(40, 20, 10, 10);
            addRectangle(50, 20, 10, 10);
            addRectangle(60, 20, 10, 10);
            addRectangle(70, 20, 10, 10);
            addRectangle(80, 20, 10, 10);
            addRectangle(10, 30, 10, 10);
            addRectangle(20, 30, 10, 10);
            addRectangle(40, 30, 10, 10);
            addRectangle(50, 30, 10, 10);
            addRectangle(60, 30, 10, 10);
            addRectangle(80, 30, 10, 10);
            addRectangle(90, 30, 10, 10);
            addRectangle(0, 40, 10, 10);
            addRectangle(10, 40, 10, 10);
            addRectangle(20, 40, 10, 10);
            addRectangle(30, 40, 10, 10);
            addRectangle(40, 40, 10, 10);
            addRectangle(50, 40, 10, 10);
            addRectangle(60, 40, 10, 10);
            addRectangle(70, 40, 10, 10);
            addRectangle(80, 40, 10, 10);
            addRectangle(90, 40, 10, 10);
            addRectangle(100, 40, 10, 10);
            addRectangle(0, 50, 10, 10);
            addRectangle(20, 50, 10, 10);
            addRectangle(30, 50, 10, 10);
            addRectangle(40, 50, 10, 10);
            addRectangle(50, 50, 10, 10);
            addRectangle(60, 50, 10, 10);
            addRectangle(70, 50, 10, 10);
            addRectangle(80, 50, 10, 10);
            addRectangle(100, 50, 10, 10);
            addRectangle(0, 60, 10, 10);
            addRectangle(20, 60, 10, 10);
            addRectangle(80, 60, 10, 10);
            addRectangle(100, 60, 10, 10);
            addRectangle(30, 70, 10, 10);
            addRectangle(40, 70, 10, 10);
            addRectangle(60, 70, 10, 10);
            addRectangle(70, 70, 10, 10);
            closePath();
        }
    }

    protected class AlienType4 extends Alien {

        public AlienType4() {
            setColor(Color.GREEN);
            addRectangle(50, 0, 10, 10);
            addRectangle(60, 0, 10, 10);
            addRectangle(70, 0, 10, 10);
            addRectangle(80, 0, 10, 10);
            addRectangle(90, 0, 10, 10);
            addRectangle(100, 0, 10, 10);
            addRectangle(30, 10, 10, 10);
            addRectangle(40, 10, 10, 10);
            addRectangle(50, 10, 10, 10);
            addRectangle(60, 10, 10, 10);
            addRectangle(70, 10, 10, 10);
            addRectangle(80, 10, 10, 10);
            addRectangle(90, 10, 10, 10);
            addRectangle(100, 10, 10, 10);
            addRectangle(110, 10, 10, 10);
            addRectangle(120, 10, 10, 10);
            addRectangle(20, 20, 10, 10);
            addRectangle(30, 20, 10, 10);
            addRectangle(40, 20, 10, 10);
            addRectangle(50, 20, 10, 10);
            addRectangle(60, 20, 10, 10);
            addRectangle(70, 20, 10, 10);
            addRectangle(80, 20, 10, 10);
            addRectangle(90, 20, 10, 10);
            addRectangle(100, 20, 10, 10);
            addRectangle(110, 20, 10, 10);
            addRectangle(120, 20, 10, 10);
            addRectangle(130, 20, 10, 10);
            addRectangle(10, 30, 10, 10);
            addRectangle(20, 30, 10, 10);
            addRectangle(40, 30, 10, 10);
            addRectangle(50, 30, 10, 10);
            addRectangle(70, 30, 10, 10);
            addRectangle(80, 30, 10, 10);
            addRectangle(100, 30, 10, 10);
            addRectangle(110, 30, 10, 10);
            addRectangle(130, 30, 10, 10);
            addRectangle(140, 30, 10, 10);
            addRectangle(0, 40, 10, 10);
            addRectangle(10, 40, 10, 10);
            addRectangle(20, 40, 10, 10);
            addRectangle(30, 40, 10, 10);
            addRectangle(40, 40, 10, 10);
            addRectangle(50, 40, 10, 10);
            addRectangle(60, 40, 10, 10);
            addRectangle(70, 40, 10, 10);
            addRectangle(80, 40, 10, 10);
            addRectangle(90, 40, 10, 10);
            addRectangle(100, 40, 10, 10);
            addRectangle(110, 40, 10, 10);
            addRectangle(120, 40, 10, 10);
            addRectangle(130, 40, 10, 10);
            addRectangle(140, 40, 10, 10);
            addRectangle(150, 40, 10, 10);
            addRectangle(20, 50, 10, 10);
            addRectangle(30, 50, 10, 10);
            addRectangle(40, 50, 10, 10);
            addRectangle(70, 50, 10, 10);
            addRectangle(80, 50, 10, 10);
            addRectangle(110, 50, 10, 10);
            addRectangle(120, 50, 10, 10);
            addRectangle(130, 50, 10, 10);
            addRectangle(30, 60, 10, 10);
            addRectangle(120, 60, 10, 10);
            closePath();
        }
    }
}

这篇关于使用双缓冲有点毁了我的小程序。它具有Java使用或覆盖脱precated API的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆