Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 无法读取jar文件中的mp3。(getResourceAsStream和MediaPlayer)_Multithreading_Jar_Mp3_Javafx 8_Executable Jar - Fatal编程技术网

Multithreading 无法读取jar文件中的mp3。(getResourceAsStream和MediaPlayer)

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

当我将项目导出到.jar文件时,应该播放声音的线程无法启动。构造器中一定存在一些问题,我猜加载mp3文件时会出现一些问题。但是我没有得到
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文件也会播放声音