Java 制作一个简单的计时器

Java 制作一个简单的计时器,java,multithreading,timer,Java,Multithreading,Timer,我需要为我用java制作的“轰炸机人”风格的游戏制作一个3秒的停机计时器。我想让炸弹在3秒倒计时时爆炸,但是当我给我的脚本添加延迟时,它会延迟整个程序。(Thread.sleep()做同样的事情) 所以我需要一个非常简单的脚本示例,它运行一个主程序,另一个线程运行一个3秒计时器 我对java非常陌生,所以不要在没有解释的情况下使用太多花哨的词语 import java.awt.*; import java.awt.event.*; import javax.swing.*; import ja

我需要为我用java制作的“轰炸机人”风格的游戏制作一个3秒的停机计时器。我想让炸弹在3秒倒计时时爆炸,但是当我给我的脚本添加延迟时,它会延迟整个程序。(Thread.sleep()做同样的事情)

所以我需要一个非常简单的脚本示例,它运行一个主程序,另一个线程运行一个3秒计时器

我对java非常陌生,所以不要在没有解释的情况下使用太多花哨的词语

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.border.Border;

public class MainClass extends JFrame implements KeyListener{

    private static final long serialVersionUID = 1L;

    public MainClass(){     
        super("WaterBalloonWars");
        JPanel panel=new JPanel(new GridLayout(width,height));
        myGrid = new JPanel[width][height];
        Border border=BorderFactory.createLineBorder(Color.DARK_GRAY, 1);   
        for(int r=0;r<width-1;r++){
            for(int c=0;c<height-1;c++){
                double randNum = Math.random();
                myGrid[c][r] = new JPanel();
                myGrid[c][r].setBackground(Color.WHITE);
                myGrid[c][r].setBorder(border);
                if(randNum<=0.65){
                    myGrid[c][r].setBackground(Color.GRAY);
                }
                if((r & 1)==1){
                    if((c & 1)==1){
                        myGrid[c][r].setBackground(Color.BLACK);
                    }                   
                }

                panel.add(myGrid[c][r]);            
                            }
        }               
        myGrid [0][0].setBackground(Color.BLUE);
        myGrid [0][1].setBackground(Color.WHITE);
        myGrid [1][0].setBackground(Color.WHITE);
        myGrid [2][0].setBackground(Color.WHITE);
        myGrid [0][2].setBackground(Color.WHITE);
        myGrid [10][10].setBackground(Color.RED);
        myGrid [10][9].setBackground(Color.WHITE);
        myGrid [9][10].setBackground(Color.WHITE);
        myGrid [8][10].setBackground(Color.WHITE);
        myGrid [10][8].setBackground(Color.WHITE);  
        super.setContentPane(panel);
        this.addKeyListener(new UKeyListener());
        this.addKeyListener(new DKeyListener());  
        this.addKeyListener(new LKeyListener()); 
        this.addKeyListener(new RKeyListener());
        this.addKeyListener(new ShiftKeyListener());
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setResizable(false);
        }

    class ShiftKeyListener implements KeyListener{
        @Override 
        public void keyPressed(KeyEvent event) { 
            if (event.getKeyCode() == KeyEvent.VK_SHIFT) {  
               plantBomb(Color.red);
            }
        }
        @Override
        public void keyReleased(KeyEvent e) {   

        }
        @Override
        public void keyTyped(KeyEvent e) {          
        }
    }

    class UKeyListener implements KeyListener{        

        @Override 
        public void keyPressed(KeyEvent event) { 
            if (event.getKeyCode() == KeyEvent.VK_UP) {  
               redMove(1);
            }
        }
        @Override
        public void keyReleased(KeyEvent e) {   

        }
        @Override
        public void keyTyped(KeyEvent e) {          
        }
       }
    class DKeyListener implements KeyListener{        
        @Override 
        public void keyPressed(KeyEvent event) { 
            if (event.getKeyCode() == KeyEvent.VK_DOWN) {  
               redMove(2);
            }
        }
        @Override
        public void keyReleased(KeyEvent e) {   

        }
        @Override
        public void keyTyped(KeyEvent e) {          
        }
    }   
    class LKeyListener implements KeyListener{        
        @Override 
        public void keyPressed(KeyEvent event) { 
            if (event.getKeyCode() == KeyEvent.VK_LEFT) {  
               redMove(3);
            }
        }
        @Override
        public void keyReleased(KeyEvent e) {   

        }
        @Override
        public void keyTyped(KeyEvent e) {          
        }
    }
    class RKeyListener implements KeyListener{        
        @Override 
        public void keyPressed(KeyEvent event) { 
            if (event.getKeyCode() == KeyEvent.VK_RIGHT) {  
               redMove(4);
            }
        }
        @Override
        public void keyReleased(KeyEvent e) {   

        }
        @Override
        public void keyTyped(KeyEvent e) {          
        }
    }
        public void plantBomb(Color color){     
            if(color.equals(Color.red)){
                rbombx=rx;
                rbomby=ry;
                myGrid[rbombx][rbomby].setBackground(Color.orange);
                redBombPlaced=true; 
                explode(Color.red,2,rbombx,rbomby);

            }
            if(color.equals(Color.blue)){

            }
        }
    public void explode(Color color,int power,int x,int y){ 
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
导入javax.swing.border.border;
公共类MainClass扩展JFrame实现KeyListener{
私有静态最终长serialVersionUID=1L;
公共MainClass(){
超级(“水上战争”);
JPanel面板=新JPanel(新网格布局(宽度、高度));
myGrid=新的JPanel[宽度][高度];
Border Border=BorderFactory.createLineBorder(颜色为深灰色,1);

对于(int r=0;r,可以使用TimerTask在线程内创建计时器

使用
线程.sleep
实际上会将主线程置于
块状态

示例:

    public class TimerBomb {
  Toolkit toolkit;

  Timer timer;

  public TimerBomb(int seconds) {
    toolkit = Toolkit.getDefaultToolkit();
    timer = new Timer();
    timer.schedule(new RemindTask (), seconds * 1000);
  }

  class RemindTask extends TimerTask {
    public void run() {
      System.out.println("3 second is up");
    }
  }

  public static void main(String args[]) {
    System.out.println("About to schedule task.");
    Thread t = new Thread(new Runnable() {

        @Override
        public void run() {
            new TimerBomb(3);


        }
    });
    t.start();
    System.out.println("Task scheduled.");
  }
}

你能展示一些代码吗?你真的为计时器创建了一个单独的线程吗?更新了我原来的帖子谢谢!这真的很有帮助!
new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            Thread.sleep(3000);
            bombs.explode();
        } catch (InterruptedException e) {
        }
    }
}).start();
    public class TimerBomb {
  Toolkit toolkit;

  Timer timer;

  public TimerBomb(int seconds) {
    toolkit = Toolkit.getDefaultToolkit();
    timer = new Timer();
    timer.schedule(new RemindTask (), seconds * 1000);
  }

  class RemindTask extends TimerTask {
    public void run() {
      System.out.println("3 second is up");
    }
  }

  public static void main(String args[]) {
    System.out.println("About to schedule task.");
    Thread t = new Thread(new Runnable() {

        @Override
        public void run() {
            new TimerBomb(3);


        }
    });
    t.start();
    System.out.println("Task scheduled.");
  }
}