有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何创建另一个线程,以便我的ActionListener在运行planet simulation时仍然侦听按钮按下事件?

我有一个JButton,并在其中添加了一个ActionListener。我还有一个SimulationPanel类,它扩展了JPanel,并有一个名为simulationPanel的实例。两者都被添加到JFrame。在ActionListenerI call simulationPanel.startSimulation()actionPerformed方法中

class StartButtonListener implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent arg0) {
        if(mode == MODE_DEFAULT){
            mode = MODE_SIMULATING;
            startButton.setText("Stop Simulation");
            simulationPanel.startSimulation();                              
        } else if(mode == MODE_SIMULATING){
            mode = MODE_DEFAULT;
            startButton.setText("Start Simulation");
            simulationPanel.stopSimulation();
        }
    }
}

stopSimulation()方法将running设置为false

public void startSimulation() {
    running = true;
    long time = System.currentTimeMillis();
    long time2 = System.currentTimeMillis();
    while(running){
        time = System.currentTimeMillis();
        if(time - time2 > 1000/60){
            for(int i = 0; i < planets.size(); i++) {
                planets.get(i).setLocation(planets.get(i).getNewLocation());
            }
            this.paintImmediately(0, 0, 950, 680);
            time2 = System.currentTimeMillis();
        }
    }
}

这将设置我的行星的新位置,并每隔60秒重新绘制屏幕

问题是,一旦进入while(running)循环,ActionListener就不再响应被按下的按钮,因此无法调用stopSimulation()。我该如何创建一个新线程,使按钮能够在模拟运行时做出响应

The entire program


共 (1) 个答案