当前位置: 首页 > 知识库问答 >
问题:

如何通过用户输入控制Javafx media player应用程序[重复]

柯昱
2023-03-14

我不熟悉java和javafx,我创建了javafx媒体播放器,它写得很好,但我尝试使用用户输入来控制暂停和播放功能,例如,如果用户输入1应该执行暂停功能和视频暂停。当我运行代码时,实际上什么都没有发生,应用程序一直在加载。可能吗?任何帮助都将受到感谢。

public class Main extends Application {
Player player ;

@Override
public void start(Stage primaryStage) {

     player =new Player("file:///C:/song.mp4");
    Scene scene =new Scene(player,720,480,Color.BLACK);



    primaryStage.setScene(scene);

    primaryStage.show();
    user();
 }
public void user(){
    Scanner sc =new Scanner(System.in);
    System.out.println("enter 1 to pasue");
    int option =sc.nextInt();
    player.pause1(option);
}


public static void main(String[] args) {
    launch(args);

共有1个答案

庾君博
2023-03-14

您的应用程序一直在加载,因为sc.nextInt()正在等待用户输入,有效地阻止了执行。你可以用另一个线程...

@Override
public void start(Stage primaryStage) {
    MediaPlayer player = new MediaPlayer(new Media("http://www.archive.org/download/moby_dick_librivox/mobydick_000_melville.mp3"));
    MediaView view = new MediaView(player);
    Pane root = new Pane(view);
    Scene scene = new Scene(root);

    primaryStage.setTitle("Mp3 player");
    primaryStage.setScene(scene);
    primaryStage.show();
    player.play();

    new Thread(() -> { 
        Scanner sc = new Scanner(System.in);
        System.out.println("enter 1 to pasue");
        int option = sc.nextInt();
        if (option == 1) {
            player.stop();
        }
    }).start();
}

public static void main(String[] args) {
    launch(args);
}

它会起作用,但这也不是一个好的解决方案。控制台应用程序适用于可以在批处理模式下执行的任务。另一方面,您的应用程序是交互式的,因此您应该考虑切换到事件驱动的编程和图形用户界面,例如,通过使用按钮处理用户操作

 类似资料:
  • 问题内容: 这是我的代码。我不确定如何使用返回值退出程序。有任何想法吗?这是我完成任务的最后一步。重要区域标有////////我听到了返回的消息,但是当我将main中的void更改为int时,程序会说main必须为void。 问题答案: 只要您不需要返回自定义退出代码(由所返回的0 除外)并且不启动新线程,就可以通过执行以下操作来终止程序 用你的方法。请注意,没有返回任何值,因此您无需将方法从更改

  • 问题内容: 我一直在尝试从Java应用程序中检索“ unicode用户输入”,以获得一个小的实用程序片段。问题是,它似乎在“开箱即用”的Ubuntu上运行,我猜它在UTF-8上具有操作系统范围的编码,但是从“ cmd”运行时在Windows上不起作用。考虑的代码如下: 在Ubuntu上的输出(不对配置进行任何更改): 在Windows CMD提示符下输出(绝不受JAVA_TOOL_OPTIONS影

  • 问题内容: 我正在编写一个简单的猜谜游戏程序,用户将输入一个数字来尝试猜测一个随机生成的数字。 如果他们的号码正确,我想给他们选择再次玩的机会。 这是我的代码: 游戏进行完毕,但是提示用户再次玩游戏时,什么都没有发生? 有什么建议? 问题答案: 这是完整的代码,完全可以使用并经过测试。

  • 问题内容: 我正在尝试使用Angularjs验证文本框中的邮政编码和电话号码。但这没用 问题答案: 首先,如mico所指出,在您的正则表达式语法中使用双管道是无效的,并且会破坏您的表达式。 其次,ng- pattern每个输入只能验证一个模式。如果您需要它来验证或验证,则需要走两条路线之一,创建自定义指令,或向控制器添加一些逻辑以确定我们应该检查的表达式,然后使用数据绑定将其传递给ng- patt

  • 我想问一下,是否可以通过一个JavaFX类传递一个变量,什么将应用程序扩展到我的JavaFX控制器?我对JavaFx非常陌生,可能只需要一点点。 目标是将一个Id从MyClass传递给MyController。 我的应用程序类: 我的控制器:

  • 问题内容: 我刚刚开始弄乱JLine来解析控制台模式下的字符输入。看来运作良好,但我想知道: JLine中是否有非阻塞方式来查找字符是否可用?(例如,在Windows中。) 我想我总是可以将键盘输入包装在其自己的线程中,该线程随后将键盘字符提供给主线程一个线程安全的队列,但这似乎是不必要的。 编辑 :这是逐字符解析。我不会使用GUI。在控制台模式下,Java中通常的InputStream I /