Java小程序:播放音乐失败

Java小程序:播放音乐失败,java,audio,applet,awt,Java,Audio,Applet,Awt,我想在我的小程序中播放spacemusic.au。音乐文件位于Game/src和Game/bin中。 但是,当我单击“循环播放”时,它不会播放音乐。因为它是.au文件,所以应该很适合玩。这是什么原因造成的 import java.applet.*; import java.awt.*; import java.awt.event.*; public class playMusic extends Applet implements ActionListener{ Button play

我想在我的小程序中播放spacemusic.au。音乐文件位于Game/src和Game/bin中。 但是,当我单击“循环播放”时,它不会播放音乐。因为它是.au文件,所以应该很适合玩。这是什么原因造成的

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

public class playMusic extends Applet 
implements ActionListener{
   Button play,stop;
   AudioClip audioClip;
   public void init(){
      play = new Button("  Play in Loop  ");
      add(play);
      play.addActionListener(this);
      stop = new Button("  Stop  ");
      add(stop);
      stop.addActionListener(this);
      audioClip = getAudioClip(getCodeBase(), "spacemusic.au");
   }
   public void actionPerformed(ActionEvent ae){
      Button source = (Button)ae.getSource();
      if (source.getLabel() == "  Play in Loop  "){
         audioClip.play();
      }  
      else if(source.getLabel() == "  Stop  "){
         audioClip.stop();
      }
   }
}

不能用这种方式比较字符串

if (source.getLabel() == "  Play in Loop  "){
你应该使用.equals

if (source.getLabel().equals("  Play in Loop  ")){

无论如何,使用一个布尔变量来表示音乐是否正在播放

通过创建一个音乐文件夹并将音乐文件放在其中,并引用为“music/spacemusic.au”来解决此问题参见本教程:

打印getCodeBase()的值,现在您可以找出问题所在

它是否指向正确的位置?如果是,则spacemusic.au文件是否存在

替换您的
actionPerformed
方法(使用equals代替==或使用==作为对象引用本身)


java控制台上的异常是什么?没有异常。它只是不播放音乐,好像它找不到文件,但它就在那里。1)为什么要编写小程序?如果是由于老师的特殊要求,请参考。2) 为什么是AWT而不是Swing?关于放弃使用AWT组件的许多好理由,请参见我的答案。或者检查source==play和source==stop谢谢您的建议。但这并没有解决问题。还是不玩?你确定文本是平等的吗?能否在打印的actionPerfomed中添加调试消息。getLabel()?我在actionPerfomed中添加了调试消息,它正在打印。但是,我仍然听不到程序中的任何音乐。是否在audioClip.play()和audioClip.stop()之前添加了调试消息?
public void actionPerformed(ActionEvent ae) {
    Button source = (Button) ae.getSource();
    if (source == play) {
        audioClip.play();
    } else if (source == stop) {
        audioClip.stop();
    }
}