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

JavaFXChangeListener持续时间问题

长孙阳焱
2023-03-14

我对Java非常陌生,在仔细阅读文档之后,我发现自己陷入了困境。

我有一个使用JavaFXMediaPlayer播放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播放过程中,mycurrTimeLabel以毫秒为单位随当前时间更新。问题是,我希望这次以分钟为单位:秒。

变量newVal被列为类型“Duration”,Duration类有类似toMinutes()toSeconds()的方法,但我无法将它们应用于newVal,我不明白为什么。

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

Duration testDuration = Duration.millis(100000);

然后使用以下方法:

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

因此,如果testDurationnewVal都是duration对象,为什么我不能将这些方法应用于newVal

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

提前谢谢。

共有1个答案

仰成天
2023-03-14

这是因为您的newVal是一个对象,而不是一个持续时间。您可以像((Duration)newVal)一样强制转换它并取消引用它 另一个更好的方法是使您的方法ChangeListener

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

 类似资料:
  • 问题内容: 如何获取格式为2个字符串的持续时间? 我正在尝试使用Calendar类并检查。我与此有关的问题是它不一致。知道我在做什么错吗?每次我运行该程序时,如果没有,输出40-70行到控制台。 问题答案: 那是一个已记录的错误。 尝试在设置日历之前清除日历:

  • 许多记者将显示测试持续时间,以及标记缓慢的测试,如“spec”记者所示: 要调整被认为“慢”的东西,您可以使用以下slow()方法: describe('something slow', function() { this.slow(10000); it('should take long enough for me to go make a sandwich', function() { /

  • 在我的应用程序中,用户需要能够输入持续时间,包括分钟和秒。 我正在考虑使用Windows中的控件来更改时间,虽然我只需要几分钟和几秒钟,而且箭头也很好,但不是必需的。 JavaFX 2中是否已经有此控件 如果没有,我如何创建这样的控件 上述Windows控件的屏幕截图: 谢谢你的提示!

  • 对于我的项目,我必须读取在CSV文件中提供给我们的数据并以某种格式将其写出。我几乎完成了,但我遇到的问题是我的程序没有完全读取给定的时间。从这里开始,我的程序只是读取所有给定的时间。 我试图将<code>字符串时间。 这应该会回来 [芝麻街|埃尔莫之最1240:28:11] 但它返回 [Elmo的最佳|芝麻街124;2:29,1:30,2:09,1:46,1:55,2:02,1:42,2:40,1

  • 问题内容: 我有一个价值,我想得到另一个正好是1个月前的时间。 我知道可以用(想要另一个)进行减法,但这会导致a,而我反过来需要它。 问题答案: 尝试AddDate: 产生: 游乐场:http://play.golang.org/p/QChq02kisT

  • 我正在寻找一种从“ISO 8601持续时间格式”(P0DT0H0M0S)转换为小时的便捷方法。 到目前为止,我想到了这个: 如您所见,我的方法是将数字拆分并乘以24、1、1/60、1/3600以得到小时。我可以减少代码量吗? 样本数据和所需结果 输入: 'P1DT2H3M44S' (1 天 2 小时 3 分 44 秒) 期望输出: 26.062222222222222 (这是小时)