小弟在写一Socket程序,类似于QQ的,现在有一问题,就是用JMF来播放消息提示音。如果直接在Eclipse中运行是正常的,如果打成jar包放进虚拟机里面就会出现下面的异常,声音文件我也有打包进去,但是现在是提示下面是异常和我写的播放声音的类,请各位大侠拍砖!javax.media.NoPlayerException: Cannot find a Player for :jar:file:/C:/fat.jar!/t
ones/msg.wav
at javax.media.Manager.createPlayerForContent(Manager.java:1412)
at javax.media.Manager.createPlayer(Manager.java:417)
at javax.media.Manager.createRealizedPlayer(Manager.java:553)
at com.nothing.sound.WavPlay.play(WavPlay.java:29)
at com.nothing.util.Tools.playWav(Tools.java:215)
at com.nothing.socket.c.Client.setHasMsg(Client.java:128)
at com.nothing.socket.c.CtoSThread.run(CtoSThread.java:79)
Exception in thread "Thread-3" java.lang.NullPointerException
at com.nothing.sound.WavPlay.play(WavPlay.java:40)
at com.nothing.util.Tools.playWav(Tools.java:215)
at com.nothing.socket.c.Client.setHasMsg(Client.java:128)
at com.nothing.socket.c.CtoSThread.run(CtoSThread.java:79)
-------------------------------分哥线------------------------------
package com.nothing.sound;import java.io.File;
import java.io.IOException;
import java.net.URL;import javax.media.CannotRealizeException;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.media.Player;import com.nothing.clients.Nothing;import sun.audio.AudioStream;public class WavPlay implements ControllerListener{ Player player = null;
public WavPlay() {} public void play(String path) {
URL url = Nothing.class.getResource(path);
MediaLocator mediaLocator = new MediaLocator(url);
try {
player = Manager.createRealizedPlayer(mediaLocator);
} catch (NoPlayerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CannotRealizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
player.addControllerListener (this);
player.prefetch();
player.start();
} @Override
public void controllerUpdate(ControllerEvent e) {
// TODO Auto-generated method stub
if (e instanceof EndOfMediaEvent) {
player.stop();
player.close();
return;
}
}
}
ones/msg.wav
at javax.media.Manager.createPlayerForContent(Manager.java:1412)
at javax.media.Manager.createPlayer(Manager.java:417)
at javax.media.Manager.createRealizedPlayer(Manager.java:553)
at com.nothing.sound.WavPlay.play(WavPlay.java:29)
at com.nothing.util.Tools.playWav(Tools.java:215)
at com.nothing.socket.c.Client.setHasMsg(Client.java:128)
at com.nothing.socket.c.CtoSThread.run(CtoSThread.java:79)
Exception in thread "Thread-3" java.lang.NullPointerException
at com.nothing.sound.WavPlay.play(WavPlay.java:40)
at com.nothing.util.Tools.playWav(Tools.java:215)
at com.nothing.socket.c.Client.setHasMsg(Client.java:128)
at com.nothing.socket.c.CtoSThread.run(CtoSThread.java:79)
-------------------------------分哥线------------------------------
package com.nothing.sound;import java.io.File;
import java.io.IOException;
import java.net.URL;import javax.media.CannotRealizeException;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.media.Player;import com.nothing.clients.Nothing;import sun.audio.AudioStream;public class WavPlay implements ControllerListener{ Player player = null;
public WavPlay() {} public void play(String path) {
URL url = Nothing.class.getResource(path);
MediaLocator mediaLocator = new MediaLocator(url);
try {
player = Manager.createRealizedPlayer(mediaLocator);
} catch (NoPlayerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CannotRealizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
player.addControllerListener (this);
player.prefetch();
player.start();
} @Override
public void controllerUpdate(ControllerEvent e) {
// TODO Auto-generated method stub
if (e instanceof EndOfMediaEvent) {
player.stop();
player.close();
return;
}
}
}
ones/msg.wav
前面多了个“jar:”
ones/msg.wav 并不是Cannot find a file:/……。
这个没错
我输出了下:file:/E:/works/java/workspace/NOTHING/bin/tones/msg.wav
刚刚我又试了下,在本机环境中运行jar包是正常的,声音也可以正常播放。
但放到虚拟机里面就不行了,我也是虚拟机里面装了JMF,但还是不行。