此代码在Intellij中编译,但它在jar中不起作用。
使用getResourceAsStream()
或getResource
doest无法解决问题。
(我已尝试使用像Image image = newImage(getClass().getResourceAsStream("image.png");
这样的图像并且确实有效)
package Sound;
import javafx.application.Application;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;
import javafx.util.Duration;
import java.io.File;
/**
*/
public class TestSound extends Application{
public TestSound() {
play();
}
@Override
public void start(Stage primaryStage) throws Exception {
new TestSound().play();
}
private void play(){
String mainsound = "src/res/sound/main.mp3";
Media i = null;
i = new Media( new File(mainsound).toURI().toString());
MediaPlayer mediaPlayer = new MediaPlayer(i);
mediaPlayer.play();
mediaPlayer.setStopTime(new Duration(120000));
mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE);
}
public static void main (String[] args){
launch(args);
}
}
编辑:
Media i = new Media(getClass().getClassLoader().getResource(mainsound));
不会工作,因为构造函数需要一个String。
但也
Media i = new Media(getClass().getClassLoader().getResource(mainsound).toString());
new MediaPlayer(i).play();
不起作用。
ofcourse mainsound =" res / sound / main.mp3&#34 ;;
用winrar提取罐子后 我收到了声音字典 testsound.class和main.mp3
另一个包含main.mp3
的词典两个词典都在同一个词根中。
答案 0 :(得分:2)
getClass().getResource("res/sound/main.mp3")
将查找相对于当前类的名为res/sound/main.mp3
的资源。由于您的类位于sound
包中,因此它实际上会查找/sound/res/sound/main.mp3
,这不是资源位于jar中的位置。
如果jar文件中的条目列表正在显示
/sound/main.mp3
然后以下内容应该有效:
String mediaURL = getClass().getResource("/sound/main.mp3").toExternalForm();
// for debugging:
System.out.println(mediaURL);
Media i = new Media(mediaURL);
答案 1 :(得分:0)
不是使用Media m = new Media ("/myMedia.mp3");//if the media exists in default package
,而是像
Media m = new Media ("/mypackage/myMedia.mp3");//if the media exists in mypackage
或
{{1}}