import java.awt.*;
import java.awt.event.*;
import sun.audio.*; 
import java.io.*;import javax.swing.*;
import javax.swing.event.*;
public class PlayMusic extends JFrame implements ActionListener,ListSelectionListener{
//AudioClip sound;
static JButton play=new JButton("播放");
    static JButton stop=new JButton("停止");
static JButton loop=new JButton("循环播放");
static  DefaultListModel data=new DefaultListModel();
static  JList list=new JList(data);
static AudioStream as;
static String[] musicName={"1.wav","2.wav","3.wav","4.wav"};
public static void main(String[] args) throws IOException{
PlayMusic s=new PlayMusic();
for(int i=0;i<musicName.length;i++){
data.addElement(musicName[i]);
}

list.setSelectedIndex(0);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JScrollPane jscrolling=new JScrollPane(list);
JPanel north=new JPanel(new FlowLayout());
north.add(play);
north.add(stop);
north.add(loop);
JPanel center=new JPanel(new GridLayout(1,1));
center.add(jscrolling);
JPanel all=new JPanel(new BorderLayout());
all.add("North",north);
all.add("Center",center);
s.add(all);
play.addActionListener(s);
stop.addActionListener(s);
loop.addActionListener(s);
list.addListSelectionListener(s);
s.setSize(300,400);
s.validate();
s.pack();
s.setVisible(true);
}
public void actionPerformed(ActionEvent arg0) {
Object e=arg0.getSource();
if(e==play)
AudioPlayer.player.start (as); 
else if(e==stop)
AudioPlayer.player.stop (as); 
}
static InputStream creatStream()throws IOException{
InputStream in=new FileInputStream(list.getSelectedValue().toString());
return in;
}
public void valueChanged(ListSelectionEvent arg0){
//String s=list.getSelectedValues().toString();
if(!arg0.getValueIsAdjusting())
try {
InputStream out= new FileInputStream(list.getSelectedValues().toString());
as=new AudioStream(out);
} catch (FileNotFoundException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
}
}
}
问题是我每次运行后,都出现找不到文件的异常,但是我把文件都放进在与项目相关的文件夹里,请大家给我指点指点,还有个问题是Java支持什么格式的音乐文件?异常的提示如下:
java.io.FileNotFoundException: [Ljava.lang.Object;@1d1e730 (系统找不到指定的文件。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at PlayMusic.valueChanged(PlayMusic.java:63)
at javax.swing.JList.fireSelectionValueChanged(Unknown Source)

解决方案 »

  1.   

    at PlayMusic.valueChanged(PlayMusic.java:63) 
      

  2.   

    InputStream out= new FileInputStream(list.getSelectedValues().toString()); 
    这个语句有问题,参数只传递文件的名称,是不行的,必须要全路径名。
    你可以配合System.getProperties("usr.dir")这个方法使用。
    例如:
    InputStream out= new FileInputStream(System.getProperties("usr.dir")+list.getSelectedValues().toString()); 
      

  3.   

    修改 先写成固定地址测试。 
    static String[] musicName={"c:\\1.wav","c:\\2.wav","c:\\3.wav","c:\\4.wav"}; InputStream out = new FileInputStream(list.getSelectedValue ().toString() );lz的代码本身就有问题。我倒是没写过播放的程序。不过支持楼主的学习精神。。都快1点了。
      

  4.   

    看下这个
    package mypro;/**
     * <p>Title: </p>
     *
     * <p>Description: </p>
     *
     * <p>Copyright: Copyright (c) 2008</p>
     *
     * <p>Company: </p>
     *
     * @author 张栋芳
     * @version 1.0音频剪辑生产控制类
     *
     */import java.io.*;
    import javax.media.*;
    import java.net.URL;
    import java.applet.Applet;
    public class MusicControl {
      private URL url = null;
      private static Player music = null;
      private boolean setAudio(File filepath) {
        try {
          url = filepath.toURL();
        }
        catch (Exception ex) {
          ex.printStackTrace();
        }
        if (url == null) {
          System.out.println("没有mp3");
          return false;
        }
        try {
          music = Manager.createPlayer(url);
        }
        catch (Exception ex) {
          ex.printStackTrace();
        }
        return true;
      }
      public void play() {
        music.start();
      }
      public void stop() {
        music.stop();
      }
      //退出
      public void exitPlay() {
        File file = new File("music/exit.mp3");
        if (setAudio(file)) {
          music.start();
        }
        else {
          System.out.println("exit");
        }
      }
      //开始
      public void startplay() {
        File file = new File("music/start.mp3");
        if (setAudio(file)) {
          music.start();
        }
      }
      public void musicplay(){//firstItem
        File file=new File("music/刘德华17岁.mp3");
        if(setAudio(file)){
          music.start();
        }
      }
      public void secondPlay(){//secondITem
        File file=new File("music/轻声歌曲.mp3");
        if(setAudio(file)){
            music.start();
        }
      }
      public void threePlay(){//threeItme
        File file=new File("music/老人与海.mp3");
        if(setAudio(file)){
          music.start();
        }
      }
      public void stopPlay(){
        music.stop();
      }
    }
      

  5.   

    我用LZ的代码改了改路径编译运行都没问题,就是播不出声音。
    请问sun.audio.* 这个包还需要下载吗?JDK里有吗?
    我在1.6.0API里怎么没有找到?
      

  6.   

    太强大了,但我太弱小了
    up
    up
    up
      

  7.   

    LZ用Eclipse做的还是
    什么
    用Eclipse直接把音乐放在项目名的目录下就可以了
    如果不是要把音乐放在和.class目录下
    注Applet程序一定要把用到的文件放到.class所在的目录下
      

  8.   

    我用 的是eclipse,歌曲文件是放在项目文件夹里