나와 저의 친구는 사람들을 리크 롤하는 데 사용되는 작은 javafx 8 프로그램을 작성하고 있습니다. 일단 그것을 열면, 닫으려고하면 다시 돌아오고 끌고 나갈 수도 있습니다. 한 가지 문제가 있습니다. 일단 프로그램을 시작한 다음 종료하면 1 초 후에 다시 열립니다. 그러나 미디어 플레이어가 멈추고 이유를 파악할 수 없습니다. 편집 : 미디어 플레이어가 다시 열릴 때 즉시 멈추지 않습니다. 다시 열면 1 초 후에 멈 춥니 다. 그래서 다시 열리고 잘 돌아갑니다. 그러나 기다리면 다시 열면 1 초 동안 그대로두면 얼 수 있습니다.javafx 장면을 닫았다가 다시 열면 내 미디어 플레이어가 정지합니다.
윈도우가 닫혀Media media = new Media(getClass().getResource("/res/video.mp4").toString());
mediaPlayer = new javafx.scene.media.MediaPlayer(media);
mediaPlayer.setAutoPlay(true);
mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE);
MediaView mediaView = new MediaView(mediaPlayer);
, 우리는 1 초 동안 영상을 일시 정지,이 코드를 사용 :
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent we) {
primaryStage.close();
mediaPlayer.pause();
System.out.println("pause");
timeline = new Timeline(new KeyFrame(
Duration.millis(1000),
e -> {
openWindow(primaryStage);
}
));
timeline.setCycleCount(1);
timeline.play();
}
});
최종적 openWindow
방법
이것은 MediaPlayer가 생성되는 경우 어떻게 1 초 후에 모든 것을 백업하는 것이 무엇입니까?
private void openWindow(Stage primaryStage){
primaryStage.show();
mediaPlayer.play();
}
나는 그것이 비현실적이라고 느꼈기 때문에 내가 빠뜨린 것들이 꽤있다. 당신이 더 필요하다고 생각한다면 여기에 전체 코드를 기꺼이 달아 주겠다.하지만 그것은 101 줄 길다. 내가 사전에 도와 주셔서 감사드립니다, 그리고 질문이 불분명하면 미안 해요 : 정말 경험이 아니에요 ... 종류 Luit MEINEN
에게편집에 관하여 : 여기 내 전체 코드입니다 :
package rickroll;
import java.util.ArrayList;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaPlayer.Status;
import static javafx.scene.media.MediaPlayer.Status.PLAYING;
import javafx.scene.media.MediaView;
import javafx.stage.Screen;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import javafx.util.Duration;
public class Rickroll extends Application {
private ArrayList<Stage> stages = new ArrayList<>();
private Group root = new Group();
private MediaPlayer mediaPlayer;
private Timeline focusTimer, timeline;
private Scene scene;
@Override
public void start(Stage primaryStage) {
Media media = new Media(getClass().getResource("/res/video.mp4").toString());
mediaPlayer = new javafx.scene.media.MediaPlayer(media);
// mediaPlayer.setAutoPlay(false);
mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE);
MediaView mediaView = new MediaView(mediaPlayer);
stages.add(primaryStage);
primaryStage.setAlwaysOnTop(true);
Button button = new Button();
button.addEventHandler(MouseEvent.MOUSE_CLICKED, e -> Platform.exit());
for(int i = 1; Screen.getScreens().size() >= i; i++){
}
root.getChildren().add(mediaView);
root.getChildren().add(button);
scene = new Scene(
root,
Screen.getPrimary().getBounds().getWidth(),
Screen.getPrimary().getBounds().getWidth()
);
primaryStage.setScene(scene);
Platform.setImplicitExit(false);
focusTimer = new Timeline(new KeyFrame(
Duration.millis(500),
e -> {
primaryStage.requestFocus();
primaryStage.centerOnScreen();
primaryStage.setMaximized(true);
}
));
focusTimer.setCycleCount(Timeline.INDEFINITE);
focusTimer.play();
primaryStage.setTitle("You just got Rick Rolled!");
openWindow(primaryStage);
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent we) {
primaryStage.hide();
mediaPlayer.pause();
System.out.println("pause");
timeline = new Timeline(new KeyFrame(
Duration.millis(1000),
e -> {
openWindow(primaryStage);
}
));
timeline.setCycleCount(1);
timeline.play();
focusTimer.pause();
}
});
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
private void openWindow(Stage primaryStage){
primaryStage.show();
mediaPlayer.play();
System.out.println("play");
focusTimer.play();
}
}
여기서 알 수 있듯이 질문에는 그다지 중요하지 않은 내용이 있습니다. 여러 화면에서이 작업을 시작한 것처럼, 창을 닫으려면 임시 단추를 누르십시오. 그 부분을 무시하십시오.
내가 시도, 그것은 작동하지 않았다. 내 전체 코드는 다음과 같습니다. – Luit
댓글이 너무 길어서 제 질문을 수정했습니다. 이제 완전한 코드를 제공합니다. 나는 너를 많이 돕기 위해 애 쓰고있다. thanks – Luit
@Luit Updated Answer –