Java 我的音乐正在重新播放,但我正在阻止它,如何以及为什么?

Java 我的音乐正在重新播放,但我正在阻止它,如何以及为什么?,java,Java,这是我的主类代码 static boolean music = true; 这是我框架中的代码 import java.awt.Color; import java.io.InputStream; import sun.audio.AudioPlayer; import sun.audio.AudioStream; public class frmMainMenu extends javax.swing.JFrame { boolean Music = ProjetFinal.music

这是我的主类代码

static boolean music = true;
这是我框架中的代码

import java.awt.Color;
import java.io.InputStream;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;

public class frmMainMenu extends javax.swing.JFrame {
  boolean Music = ProjetFinal.music;
  public frmMainMenu() {
    initComponents();
    while (Music == true) {
      try {
       InputStream test = getClass().getClassLoader().getResourceAsStream("musics/menu.wav");
       AudioStream Audio = new AudioStream(test);   
       AudioPlayer.player.start(Audio); 
       Music = false;
      } catch (Exception e){}
System.err.println("Exception occurred: ");
Music = false;        
}

}

它在我的控制台中显示“异常发生:”但我如何修复它,我的意思是,我不明白错误是什么。它发生在我的程序/框架启动时。

您的代码正在抛出一个异常,您正在盲目捕获而不是记录该异常。之后,它会重新启动,因为它还没有机会将音乐设置为false

这只是为什么永远不应该有空的
catch
块的众多原因之一

catch (final Exception e) 
{ 
   System.err.println("Exception occurred: " + e.getMessage());
   JOptionPane.showMessageDialog(null, e.getMessage()); 
}
finally { Music = false; }

使用
e.printStackTrace()在我的区块应该可以吗?如果是这样,控制台中不会弹出任何内容;音乐=假;}
没有
e
,因为它给我一个错误,在控制台中打印出该行。重点不在日志记录中,而是在发生异常时执行适当的操作。在您的情况下,记录或不记录可能是有意义的。但看起来将
音乐设置为false肯定是有意义的。所以。。。我输入了这个,它仍然不起作用,但是没有弹出JOption窗格,它仍然做同样的事情,重新播放音乐
catch(最终异常e){System.err.println(“发生异常:+e.getMessage());JOptionPane.showMessageDialog(null,e.getMessage());}最终{Music=false;}
try
块中的每行代码之间添加日志语句,查看执行了什么,或者附加一个调试器并逐行遍历代码以查看出了什么问题。尝试在while循环之后添加System.out.println()。我猜你会在音乐停止播放之前很久看到println(),因为音频是在不同的线程中播放的。