JavaFX-如何在计算机系统时钟的准确当前时间启动24小时视频(使用JavaFX媒体)?

JavaFX-如何在计算机系统时钟的准确当前时间启动24小时视频(使用JavaFX媒体)?,java,javafx,processing,Java,Javafx,Processing,我有一个24小时的录音,从00:00开始,24小时后结束。我想运行程序,让它在系统时钟上显示的同时播放视频。例如,现在巴西是20:14,所以如果我执行该程序,视频将在20小时14分钟开始播放 基本上,我希望将视频时间与系统时钟上显示的实际时间同步 我的代码有点凌乱,因为assignment需要使用处理ide,但对于我来说,要真正做到我想做的事情,我正在尝试使用Eclipse导入PApplet和所有这些。不管怎样,我只是研究了如何使用javafx播放视频,即使我的视频很大,它也可以立即开始播放 p

我有一个24小时的录音,从00:00开始,24小时后结束。我想运行程序,让它在系统时钟上显示的同时播放视频。例如,现在巴西是20:14,所以如果我执行该程序,视频将在20小时14分钟开始播放

基本上,我希望将视频时间与系统时钟上显示的实际时间同步

我的代码有点凌乱,因为assignment需要使用处理ide,但对于我来说,要真正做到我想做的事情,我正在尝试使用Eclipse导入PApplet和所有这些。不管怎样,我只是研究了如何使用javafx播放视频,即使我的视频很大,它也可以立即开始播放

public class UsingProcessing extends PApplet{

  String Dir = System.getProperty("C:");
  Stage stage;

  public static void main(String[] args)  {

      PApplet.main("UsingProcessing");
  }

  public void settings(){

      size(1100, 618,FX2D);
  }

  public void setup(){

      try {

          Field field = PSurfaceFX.class.getDeclaredField("stage");
          field.setAccessible(true);
          stage = (Stage)field.get(surface);

          File f = new File(Dir, "narrativas.mp4");

          Media media = new Media(f.toURI().toURL().toString());
          javafx.scene.media.MediaPlayer player = new 
          javafx.scene.media.MediaPlayer(media);
          MediaView viewer = new MediaView(player);

          DoubleProperty width = viewer.fitWidthProperty();
          DoubleProperty height = viewer.fitHeightProperty();
          width.bind(Bindings.selectDouble(viewer.sceneProperty(), "width"));
          height.bind(Bindings.selectDouble(viewer.sceneProperty(), "height"));
          viewer.setPreserveRatio(true);

          StackPane root = new StackPane();
          root.getChildren().add(viewer);


          Scene scenes = new Scene(root, 1100, 618, Color.BLACK);
          stage.setScene(scenes);
          stage.setTitle("OBSV.CamFeed.6°07'08.3\"S 12°23'51.5\"E");
          stage.setFullScreen(false);
          stage.show();
          player.play();
      } 

      catch (Exception e) {

          e.printStackTrace();
      }
  }
}

我基本上使用的是在Eclipse中使用javafx播放视频的标准方式。

首先,您需要获得从午夜开始的持续时间:

ZonedDateTime now = ZonedDateTime.now();
ZonedDateTime startOfDay = now.toLocalDate().atStartOfDay();
java.time.Duration d = java.time.Duration.between(startOfDay, now);
将该对象转换为对象

然后打电话


虽然我不知道这个问题的具体含义,但这段代码看起来不错。我有一个顾虑:这段代码隐式地依赖于JVM的当前默认时区。该默认值可以在运行时的任何时刻更改,即使在代码的第一行和第二行之间也是如此。因此,我建议始终明确地将所需/预期的
ZoneId
参数传递给
now
&
atStartOfDay
)。提示:尽量避免使用“午夜”这个术语,因为它是不明确的。“一天中的第一个时刻”是准确的。我想补充一条关于一天可能长于或短于24小时的警告。问题:看起来您混淆了类(及其方法)将参数传递给类。我尝试更正代码以在
Duration
类之间进行转换。
javafx.util.Duration
类构造函数实际上需要几毫秒(a
double
),但我假设了整毫秒(a
long
)对于此问题的上下文来说已经足够了。当然,如果不再需要该注释,请将其删除。如果我的注释中的投诉得到满足,我也将删除我的注释。对堆栈溢出进行注释的唯一目的是改进问题(或答案).你知道一天并不总是24小时长吗?它们可以是23小时、25小时、23.5小时和其他我没有想到的时间数…事实上,我不确定我是否听说过这一点。计算机时钟是否解释了这种变化?我想如果没有,24小时视频可以与系统时钟时间正确同步。。。但我现在不确定!例如,在他们实行夏令时的时区,在秋天,当他们“后退”一小时时,一小时重复(例如凌晨2点)最近,朝鲜将时钟调到了半小时,以赶上韩国;虽然我不确定这是向前跳还是向后跳,但向后跳有一天是24.5小时。世界各地的政客们以惊人的频率对时区进行了疯狂的改变。
javafx.util.Duration duration = new javafx.util.Duration( d.toMillis() ) ;
player.setStartTime(duration);