请大哥大姐们帮忙看看,我想在一个java游戏中添加背景音乐。用的是sun包中的方法。可是限于能力,一直弄不好,请帮忙看看问题出在哪里。谢谢谢谢谢谢。
代码:import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.LinkedList;
import sun.audio.*; 
public class Memory extends JFrame implements ActionListener,Runnable

  Thread thread;
  JMenuBar bar;
  JMenu fileMenu1,fileMenu2,fileMenu3;
  JMenuItem 初级,中级,高级,初级排行榜,中级排行榜,高级排行榜;
  Block block[];
  ImageIcon icon[];
  MemoryTestPane 记忆测试板=null;
  File file初级=new File("初级记忆排行榜.txt"),
       file中级=new File("中级记忆排行榜.txt"),
       file高级=new File("高级记忆排行榜.txt");  LinkedList 成绩表=null;
  ShowRecord 显示成绩表对话框=null;
  int m=5,n=6;                                        
  int 图标个数=0;
  Container con=null;
  JTextField 提示条=null;
  File gradeFile=null;
  Thread thread1;
  public  Memory()
  { 
thread=new Thread(this);
    block=new Block[m*n];
    图标个数=m;
    icon=new ImageIcon[图标个数];
    for(int i=0;i<icon.length;i++)
       {
         icon[i]=new ImageIcon("a"+i+".gif");
       } 
    for(int i=0;i<block.length;i++)
       {
         block[i]=new Block();
         block[i].设置关闭时的图标(new ImageIcon("关闭.gif"));
       }
  
    bar=new JMenuBar();
    fileMenu1=new JMenu("记忆力测试");
    fileMenu2=new JMenu("排行榜");
    fileMenu3=new JMenu("音乐");
    初级=new JMenuItem("初级");
    中级=new JMenuItem("中级");
    高级=new JMenuItem("高级");
    fileMenu1.setMnemonic('G');
    初级.setMnemonic('B');
    中级.setMnemonic('I');
    高级.setMnemonic('E');
    高级排行榜=new JMenuItem("高级排行榜");
    中级排行榜=new JMenuItem("中级排行榜");
    初级排行榜=new JMenuItem("初级排行榜");
    初级.setMnemonic('T');
    fileMenu1.add(初级);
    fileMenu1.add(中级);
    fileMenu1.add(高级);
    fileMenu2.add(初级排行榜);
    fileMenu2.add(中级排行榜);
    fileMenu2.add(高级排行榜);
    bar.add(fileMenu1);
    bar.add(fileMenu2);
    setJMenuBar(bar);
    初级.addActionListener(this);
    中级.addActionListener(this);
    高级.addActionListener(this);
    初级排行榜.addActionListener(this);
    中级排行榜.addActionListener(this);
    高级排行榜.addActionListener(this);
    成绩表=new LinkedList();
    if(!file初级.exists())                         
     {
      try{
          FileOutputStream out=new FileOutputStream("初级记忆排行榜.txt");
          ObjectOutputStream object_out=new ObjectOutputStream(out);
          object_out.writeObject(成绩表);
          object_out.close();
          out.close();
         }
      catch(IOException e)
         {
         }
     } 
     if(!file中级.exists())
     {
      try{
          FileOutputStream out=new FileOutputStream("中级记忆排行榜.txt");
          ObjectOutputStream object_out=new ObjectOutputStream(out);
          object_out.writeObject(成绩表);
          object_out.close();
          out.close();
         }
      catch(IOException e)
         {
         }
     } 
     if(!file高级.exists())
     {
      try{
          FileOutputStream out=new FileOutputStream("高级记忆排行榜.txt");
          ObjectOutputStream object_out=new ObjectOutputStream(out);
          object_out.writeObject(成绩表);
          object_out.close();
          out.close();
         }
      catch(IOException e)
         {
         }
     } 
    gradeFile=file初级;
    setBounds(100,100,700,600);
    setVisible(true);
    addWindowListener(new WindowAdapter()
      {
        public void windowClosing(WindowEvent e)
         {
          System.exit(0);
         }
      });
    con=getContentPane(); 
    记忆测试板=new MemoryTestPane(block,icon,m,n,gradeFile);
    提示条=new JTextField("初级:您需要连续找出"+6+"个相同图标的方块"); 
    提示条.setEditable(false);
    提示条.setForeground(Color.red);
    con.add(记忆测试板,BorderLayout.CENTER);
    con.add(提示条,BorderLayout.SOUTH);
    con.validate();
    this.validate();
 }
 public void 给出级别测试(int 宽,int 高,File f)
 {    
    m=宽;
    n=高;
    图标个数=m;
    gradeFile=f;
    block=new Block[m*n];
    icon=new ImageIcon[图标个数];
       for(int i=0;i<icon.length;i++)
       {
         icon[i]=new ImageIcon("a"+i+".gif");
       } 
    for(int i=0;i<block.length;i++)
       {
         block[i]=new Block();
         block[i].设置关闭时的图标(new ImageIcon("关闭.gif"));
       }
    记忆测试板=new MemoryTestPane(block,icon,m,n,gradeFile);
    con.removeAll();
    con.add(记忆测试板,BorderLayout.CENTER);
    con.add(提示条,BorderLayout.SOUTH);
    con.validate();
    this.validate();
 }
 public void actionPerformed(ActionEvent event)
 { 
   if(event.getSource()==初级) 
       {  
         给出级别测试(5,6,file初级);
         setBounds(100,100,700,600);
         this.validate();
         提示条.setText("初级:您需要连续找出"+6+"个相同图标的方块");
       }
   if(event.getSource()==中级) 
       {
         给出级别测试(6,7,file中级);
         setBounds(100,100,700,600);
         this.validate();
         提示条.setText("中级:您需要连续找出"+7+"个相同图标的方块");
       }
   if(event.getSource()==高级) 
       {  
         给出级别测试(7,8,file高级);
         setBounds(100,100,700,600);
         this.validate();
         提示条.setText("高级:您需要连续找出"+8+"个相同图标的方块");
       }
   if(event.getSource()==高级排行榜)
       {
         显示成绩表对话框=new ShowRecord(this,file高级);
         显示成绩表对话框.setVisible(true);
       }
    if(event.getSource()==中级排行榜)
       {
         显示成绩表对话框=new ShowRecord(this,file中级);
         显示成绩表对话框.setVisible(true);
       }
     if(event.getSource()==初级排行榜)
       {
         显示成绩表对话框=new ShowRecord(this,file初级);
         显示成绩表对话框.setVisible(true);
       }
 } 
 public void run()
 {
 InputStream in = null;
try {
in = new FileInputStream ("夜太黑.wav");
} catch (FileNotFoundException e1) {

e1.printStackTrace();

AudioStream as = null;
try {
as = new AudioStream (in);
} catch (IOException e) {

e.printStackTrace();

AudioPlayer.player.start (as); 
 }public static void main(String args[])
  {
    Memory a=new Memory();
    a.thread.start();
  }
}

解决方案 »

  1.   

    主要问题是在thread的位置是不是正确和run方法是不是正确?
      

  2.   

    读取音乐文件的是哪个类呢?我是菜鸟,刚才在网上一通找才找到那个sun包的方法
      

  3.   

    估计是thread的地方位置没有放对地方!
      

  4.   

    里面多了一个thread,我删了thread1了。然后把文件改成.au文件就能用了。不过线程这方面还是没弄懂。我在frame里加了个thread=new thread(this),然后在run()里面写音乐。但是这样就无法控制音乐播放和停止了。不知道怎么解决好?
    多谢楼上的,能告诉我放在哪里好吗?