java吧 关注:1,257,716贴子:12,752,346
  • 2回复贴,共1

【跪求】求大神帮忙解决下Timer计时器老报错的问题~~~郁闷了

只看楼主收藏回复



IP属地:上海1楼2014-03-25 19:16回复
    package AWT绘图;
    import java.awt.*;
    import java.util.TimerTask;
    import java.awt.event.*;
    import java.util.*;
    public class PinBall
    {
    Random rand = new Random();
    Frame frame = new Frame("桌面弹球");
    //桌面宽高
    private final int TABLE_WIDTH = 300;
    private final int TABLE_HEIGHT = 400;
    //球拍位置
    private final int RACKET_Y = 340;
    private int racketX = rand.nextInt(200);
    //球拍宽高
    private final int RACKET_WIDTH = 60;
    private final int RACKET_HEIGHT = 20;
    //小球大小
    private final int BALL_SIZE = 16;
    //小球运行速度
    private int ySpeed = 10;
    private double xyRate = rand.nextDouble()-0.5;
    private int xSpeed = (int)(ySpeed*2*xyRate);
    //小球坐标位置
    private int ballX = rand.nextInt(200)+20;
    private int ballY = rand.nextInt(10)+20;
    //游戏是否结束
    private boolean isLose = false;
    //画布
    private MyCanvas tableArea = new MyCanvas();
    Timer timer;
    public PinBall()
    {
    //搞定tableArea
    tableArea.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));
    frame.add(tableArea);
    //定义键盘监听器
    KeyAdapter key = new KeyAdapter()//注意这种搞监听器的方法
    {
    public void keyPressed(KeyEvent e)
    {
    if(e.getKeyCode() == KeyEvent.VK_LEFT)
    {
    if(racketX > 0)
    racketX = racketX-10;
    }
    if(e.getKeyCode() == KeyEvent.VK_RIGHT)
    {
    if(racketX < TABLE_WIDTH-RACKET_WIDTH)
    racketX += 10;
    }
    }
    };
    //为窗口和tableArea添加键盘监听器
    frame.addKeyListener(key);
    tableArea.addKeyListener(key);
    //定义每隔0.1秒执行一次的事件监听器
    ActionListener taskPerformed = new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    //if:小球碰到边框,水平速度反向
    if(ballX <= 0 || ballX >= TABLE_WIDTH-BALL_SIZE)
    xSpeed = -xSpeed;
    //if:小球碰到球拍、或者:碰到上边缘:垂直速度反向
    if(ballY >= RACKET_Y-BALL_SIZE && ballX > racketX && ballX < racketX + RACKET_WIDTH ||ballY <= 0 )
    ySpeed = -ySpeed;
    //if:小球挂掉
    else if(ballY >= RACKET_Y-BALL_SIZE&&ballX <= racketX && ballX >= racketX + RACKET_WIDTH)
    {
    timer.cancel();//计时停止!
    isLose = true;
    tableArea.repaint();
    }
    //每计时一次,小球坐标改变
    ballY += ySpeed;
    ballX += xSpeed;
    tableArea.repaint();
    }
    };
    timer.start();
    timer = new Timer(100,taskPerformed);
    frame.pack();
    frame.setLocation(550,190);
    frame.setVisible(true);
    frame.addWindowListener(
    new WindowAdapter()
    {
    public void windowClosing(WindowEvent e)
    {System.exit(0);}
    }
    );
    }
    class MyCanvas extends Canvas
    {
    public void paint(Graphics g)
    {
    if(isLose)
    {
    g.setColor(new Color(225,0,0));
    g.setFont(new Font("Times",Font.BOLD,30));
    g.drawString("GAME OVER!",50,200);
    }
    else
    {
    g.setColor(new Color(240,240,80));
    g.fillOval(ballX,ballY,BALL_SIZE,BALL_SIZE);
    g.setColor(new Color(80,80,200));
    g.fillRect(racketX,RACKET_Y,RACKET_WIDTH,RACKET_HEIGHT);
    }
    }
    }
    public static void main(String[] args)
    {
    new PinBall();
    }
    }
    这是所有代码,求大神门帮帮忙,,感激不尽


    IP属地:上海2楼2014-03-25 19:21
    回复
      广告
      立即查看
      Timer timer = new Timer();
      timer.schedule(new TimerTask() {//签到
      @Override
      public void run() {
      boolean flag = server.signIn();
      if (flag){
      System.out.println("任务:签到成功 -- "+new Date().toString());
      }else {
      System.out.println("任务:签到失败 -- "+new Date().toString());
      }
      }
      }, 1L, 1000*60*60*8L);
      反正我是这么写的
          ------程序员是值得尊敬的,程序员的双手是魔术师的双手。他们把枯燥无味的代码变成了丰富多彩的软件……


      IP属地:广东本楼含有高级字体3楼2014-03-25 19:43
      回复