JavaFX ChangeListener 持续时间问题

标签 java audio javafx

我对 Java 很陌生,在仔细研究文档后,我发现自己陷入了困境。

我有一个小程序,使用 JavaFX MediaPlayer播放 wav 文件。我的播放器对象有一个 currentTimeProperty,我想在播放期间以分钟:秒为单位显示此属性的输出。

所以我在一个函数的末尾有这个,它接受我的 wav 文件并初始化播放器:

mediaPlayer = new MediaPlayer(wav);
mediaPlayer.currentTimeProperty().addListener(new TimeListener());

然后我有:

public class TimeListener implements ChangeListener {
    public void changed(ObservableValue o, Object oldVal, Object newVal) {

    //Update time display with MediaPlayer's current time:
    currTimeLabel.setText(newVal.toString());
    }
}

这有效。在播放 wav 期间,我的 currTimeLabel 会更新当前时间(以毫秒为单位)。问题是,我想要的时间是分:秒。

变量 newVal 被列为“Duration”类型,并且 Duration class具有诸如 toMinutes()toSeconds() 之类的方法,但我无法将它们应用于 newVal,而且我不明白为什么。

我可以创建一个新的 Duration 对象:

Duration testDuration = Duration.millis(100000);

然后使用方法:

double secondsDuration = testDuration.toSeconds();
// 100.0

因此,如果 testDurationnewVal 都是持续时间对象,为什么我不能将这些方法应用于 newval

总的来说,我走在正确的道路上吗?我知道必须有一些字符串格式才能使我的输出正确,但在我看来,首先我需要以非字符串格式从 newVal 获取值。

提前致谢。

最佳答案

这是因为你的 newVal 是一个对象而不是一个持续时间。您可以转换它并取消引用它,例如 ((Duration)newVal).另一种更好的方法是使你的方法 ChangeListener<Duration>

TimeListener = new ChangeListener<Duration>() {
      @Override public void changed(ObservableValue<? extends Duration> o, Duration oldVal, Duration newVal) {
     //now newVal is of Duration class
      }
    };

关于JavaFX ChangeListener 持续时间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22117710/

相关文章:

java - 不让我运行该应用程序

audio - ffmpeg 连接不同步音频的视频

java - 如何在Java中同步TargetDataLine和SourceDataLine(同步音频记录和播放)

audio - 计算 WAV 文件中的样本数

JavaFX - 无法从 EventHandler 中的 View Controller 访问变量

java - 使用事务测试 EJB 而不将其部署到容器中?

java - JPA删除不执行

Java 8 并行 forEach 进度指示

java - 移动刻度标签JavaFx 2

java - JavaFX 中 StackPane 上的 BufferedImage