为什么这段代码会产生更多线程?

时间:2015-07-28 02:13:17

标签: java multithreading audio

我有一个游戏,我已经开发了很长一段时间,这里是预览:

游戏描述:

-1 v 1

- 有声音

... -etc

enter image description here ///// 我只有一个问题需要修复,我似乎无法修复它。

问题:声音,只要玩家发射武器,游戏就会播放所需的声音,但这样做会产生更多线程。我认为这是为了确保声音和游戏玩法可以同时运行。

当我向用户显示 Thread.activeCount()方法时,额外的线程数很明显。

当游戏开始时,默认主线程的线程数为3,对于从构造函数开始的另一个线程,线程计数为1,而另一个线程从点击JMenuBar开始。

这里是线程数的变化:

首次开始游戏时。

Before 激光射击后。

After lasers fired 在玩家发射激光后,这会导致声音播放(这似乎是额外线程创建的罪魁祸首)。

这里有一个代码,当一个人按下时,激光发出声音 键盘上的某个按钮。

private void playClip() { //called when player fires lasers
        Clip clip;
        AudioInputStream auIn = null;
        try {
            auIn = ai; //instance variable 'ai' initialized in constr
            ai = null; //'ai' is AudioInputStream object, which used an URL
            clip = AudioSystem.getClip(); 
            clip.open(auIn);
            clip.start();
        }
        catch (LineUnavailableException | IOException ex) {
            err.println(ex);
            ex.printStackTrace(System.err);
            Logger.getLogger(OuterSpace.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally {
            if (auIn != null) {
                try {
                    auIn.close();
                }
                catch (IOException ex) {
                    err.println(ex);
                    ex.printStackTrace(System.err);
                    Logger.getLogger(OuterSpace.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }

        try { //for some reason, i have to reinitialize, in order to hear
        //the sounds again, note again, 'ai' is AudioInputStream, also
        //'url' is the URL where the sound file is at.
            this.ai = AudioSystem.getAudioInputStream(this.url);
        }
        catch (UnsupportedAudioFileException | IOException ex) {
            err.println(ex);
            ex.printStackTrace(System.err);
            Logger.getLogger(OuterSpace.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

我的主要问题是:为什么上面这个声音代码创建了更多的线程,为什么这些线程没有被删除'。欢迎提出建议和提示!谢谢。 (抱歉格式混乱!)

0 个答案:

没有答案