如何在java中停止线程

时间:2014-07-26 11:38:44

标签: java swing

我创建了一个闹铃,响闹,直到拼图解决我有一个播放闹钟的游戏课     `      包时钟;

import java.applet.Applet;
import java.applet.AudioClip;
import java.net.URL;
import javax.swing.*;


public class Play {
AudioClip ac;
Thread t;
public void playSound(int n)
{
     try {
        URL url = new URL("file:1.wav" );
        ac = Applet.newAudioClip(url);
        t= new Thread(){
            public void run(){
                ac.loop();
            }
        };
        if(n==0){
            t.start();
        }
        if (n==1){
            JOptionPane.showMessageDialog(null,"OFF");
            ac.stop();
            t.interrupt();
        }
    } 
     catch (Exception e) {
        JOptionPane.showMessageDialog(null,e); 
    }
}`

它按时播放闹钟,但是当我用参数1调用它时,它会显示" OFF"但警报线程没有停止

2 个答案:

答案 0 :(得分:1)

  

我创建了一个闹钟,响闹,直到拼图解决

您可以尝试使用最适合摇摆应用的Swing Timer

了解更多How to Use Swing Timers


以固定间隔播放声音,并在拼图解决后停止计时器。只需将标记isSolved设置为true,即可停止swing计时器。

示例代码:

private Timer timer;
private volatile boolean isSolved;
...

// interval of 1 second
timer = new javax.swing.Timer(1000, new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent arg0) {

        if(isSolved){
           // stop the timer
            timer.stop();
        }else{
            // play sound
        }
    }
});
timer.setRepeats(true); // you can turn off it 
timer.start();

答案 1 :(得分:-1)

在线程的代码中添加一个运行的布尔值,并在调用run()时将其设置为true。创建一个额外的方法,停止Run()并使用它来停止线程。

    Thread thread = new Thread(new Runnable(){

        private bolean run;

        public void run(){
           while(run){
               //code
            }
        }

  public void stopRun(){
      this.run = false;
    }
  }
);