【问题标题】:JavaFX ChangeListener duration issueJavaFX ChangeListener 持续时间问题
【发布时间】:2014-03-02 04:52:41
【问题描述】:

我对 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 classtoMinutes()toSeconds()之类的方法,但我不能将它们应用于newVal,我不明白为什么。

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

Duration testDuration = Duration.millis(100000);

然后使用方法:

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

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

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

提前致谢。

【问题讨论】:

    标签: java audio javafx


    【解决方案1】:

    这是因为你的 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
          }
        };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2011-06-22
      • 2020-10-18
      • 2017-05-10
      • 2014-11-21
      • 1970-01-01
      相关资源
      最近更新 更多