Multithreading 无法读取jar文件中的mp3。(getResourceAsStream和MediaPlayer)
当我将项目导出到.jar文件时,应该播放声音的线程无法启动。构造器中一定存在一些问题,我猜加载mp3文件时会出现一些问题。但是我没有得到Multithreading 无法读取jar文件中的mp3。(getResourceAsStream和MediaPlayer),multithreading,jar,mp3,javafx-8,executable-jar,Multithreading,Jar,Mp3,Javafx 8,Executable Jar,当我将项目导出到.jar文件时,应该播放声音的线程无法启动。构造器中一定存在一些问题,我猜加载mp3文件时会出现一些问题。但是我没有得到URISyntaxException (在eclipse项目中,一切正常) 此类存在于SpokenNumbersController类中 MediaPlayer media[] = new MediaPlayer[10]; private StringBuilder language = new StringBuilder("/PL."); publi
URISyntaxException
(在eclipse项目中,一切正常)
此类存在于SpokenNumbersController
类中
MediaPlayer media[] = new MediaPlayer[10];
private StringBuilder language = new StringBuilder("/PL.");
public PlayDigits(){
generatedDigits = new StringBuilder();
this.thisType = type;
for(int i = 0; i < 10; ++i){
StringBuilder directory = new StringBuilder(language.toString());
switch(i){
case 0: directory.append("Zero.mp3");
break;
case 1: directory.append("One.mp3");
break;
case 2: directory.append("Two.mp3");
break;
case 3: directory.append("Three.mp3");
break;
case 4: directory.append("Four.mp3");
break;
case 5: directory.append("Five.mp3");
break;
case 6: directory.append("Six.mp3");
break;
case 7: directory.append("Seven.mp3");
break;
case 8: directory.append("Eight.mp3");
break;
case 9: directory.append("Nine.mp3");
break;
default: break;
}
// URL path = getClass().getResource(directory.toString());
// media[i] = new MediaPlayer(new Media(path.toString()));
try {
media[i] = new MediaPlayer(new Media(Main.class.getResource(directory.toString()).toURI().toString()));
} catch (URISyntaxException e) {
Dialogs.create().title("Error").masthead(null).message("Couldn't load the mp3").showError();
e.printStackTrace();
}
}
digitsToFinish = (int) Math.round(sliderCountdown.getValue());
}
MediaPlayer media[]=新的MediaPlayer[10];
私有StringBuilder语言=新StringBuilder(“/PL.”);
公众数字{
generatedDigits=新的StringBuilder();
this.thisType=type;
对于(int i=0;i<10;++i){
StringBuilder目录=新的StringBuilder(language.toString());
开关(一){
案例0:directory.append(“Zero.mp3”);
打破
案例1:directory.append(“One.mp3”);
打破
案例2:directory.append(“Two.mp3”);
打破
案例3:directory.append(“Three.mp3”);
打破
案例4:directory.append(“Four.mp3”);
打破
案例5:directory.append(“Five.mp3”);
打破
案例6:directory.append(“Six.mp3”);
打破
案例7:directory.append(“Seven.mp3”);
打破
案例8:directory.append(“Eight.mp3”);
打破
案例9:directory.append(“Nine.mp3”);
打破
默认:中断;
}
//URL路径=getClass().getResource(directory.toString());
//媒体[i]=新媒体播放器(新媒体(path.toString());
试一试{
媒体[i]=新媒体播放器(新媒体(Main.class.getResource(directory.toString()).tori().toString()));
}捕获(URISyntaxException e){
Dialogs.create().title(“Error”).masthead(null).消息(“无法加载mp3”).bathror();
e、 printStackTrace();
}
}
digitsToFinish=(int)Math.round(sliderCountdown.getValue());
}
这是我的文件目录:
我发现我需要使用getResourceAsStream(),但如何使用MediaPlayer呢?我找到了使用JLayer的解决方案
String media[] = new String[10];
...
(its a loop as above)
media[i] = directory.toString();
...
InputStream is = getClass().getResourceAsStream(media[iToDigit]);
Player player = new Player(is);
new Thread(new Runnable() { //just to play sound in background not in main thread
@Override
public void run() {
try {
player.play();
} catch (JavaLayerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
现在导出的jar文件也会播放声音