我有一个带有MusicPlayer的主类。它播放音乐。现在我需要停下来,在另一节课上演奏音乐。
public class Main{
public final Media musicMedia = new Media(new File("music.mp3").toURI().toString());
public final MediaPlayer mediaPlayer = new MediaPlayer(musicMedia );
public static void main(String[] args){
}
}所以现在,我要这样做:如果音乐在播放,我点击按钮,音乐就应该停止播放。如果它不播放音乐,我按下按钮,它应该开始播放音乐。我希望你不要理会我的问题。
public class AnotherClass{
Main mp3 = new Main();
boolean clicked = true;
public void musicButtonClicked(ActionEvent e){
if(clicked){
mp3.mediaPlayer.stop(); //Stop doesn't work!
clicked = false;
}else{
mp3.mediaPlayer.play(); //It starts to play the music, even if it is already playing. So it plays multiple times..
clicked = true;
}
}
}我想在音乐结束后再重复一遍。
希望有人能帮我解决这个问题!
编辑:我就是这样打开"AnotherClass“的。
StackPane stockPane = FXMLLoader.load(Resource.onClassPath("AnotherClass.fxml").getURL());
root.getChildren().setAll(stockPane);AnotherClass.java是AnotherClass.fxml的控制器类.
发布于 2018-03-16 12:25:56
让玩家对你的静态,不要实例化它两次或更多。
public class Main {
public static final Media musicMedia = new Media(new File("music.mp3").toURI().toString());
public static final MediaPlayer mediaPlayer = new MediaPlayer(musicMedia );
public static void main(String[] args) {
}
}您不需要自己的布尔值来切换停止/播放。只需使用MediaPlayer.Status即可。如果音乐正在播放,也为第一次测试实现javafx.fxml.Initializable。
public class AnotherClass implements Initializable {
private static boolean firstTime = true;
MediaPlayer mp3 = Main.mediaPlayer;
@FXML
private Button musicButton;
@Override
public void initialize(URL location, ResourceBundle resources)
{
if (firstTime)
{
mp3.statusProperty().addListener((o, oldVal, newVal) -> updateButton(newVal));
firstTime = false;
}
updateButton(mp3.getStatus());
}
@FXML
public void musicButtonClicked(ActionEvent e) throws IOException {
switch(mp3.getStatus()) {
case PLAYING:
mp3.stop();
break;
default:
mp3.play();
break;
}
}
private void updateButton(MediaPlayer.Status status)
{
switch(status) {
case PLAYING:
this.musicButton.setText("Stop Music");
break;
default:
this.musicButton.setText("Play Music");
break;
}
}
}我想在音乐结束后再重复一遍。
将CycleCount的MediaPlayer设置为不确定。
mp3.setCycleCount(MediaPlayer.INDEFINITE);它开始播放音乐,即使它已经在播放了。所以它会多次播放..。
我的猜测是,您以某种方式多次调用了root.getChildren().setAll(stockPane);;或者每次发生事情时都会再次调用它(可能是在Button或Tab单击时--您的应用程序是在Tabs中组织的吗?)多次调用此按钮将导致重叠按钮和MediaPlayer的新实例,这些按钮和实例在实例化时没有播放-因此单击“停止/播放”按钮不会停止旧的MediaPlayer,而是启动新的MediaPlayer。
https://stackoverflow.com/questions/49320389
复制相似问题