编辑:嗯,显然这是基于意见,所以让我试着更准确地改写它 -
在不需要任何向后兼容性的Java代码中使用LocalDate,LocalTime等有任何明确的警告或缺点,如果是这样 - 它们是什么?
我正在寻找像"当前EE库X和Y无法正确使用LocalDate"或"这个非常有用的模式被LocalTime打破"等等.
(这是原始问题供参考)
在Java 8中,引入了新的时间API,即java.time.LocalDate等,但java.util.Date未标记为已弃用.
我正在编写一个新项目,它不需要向后兼容.我应该只使用LocalDate,LocalDateTime等吗?使用这个新API是否有任何缺点,而不是旧的java.util.Date?
特别是 - 我将主要使用JDBC.从我所看到的JDBC很好地处理java.util.Date.它是否适合LocalDate?
搜索产生了许多网站,告诉他们如何从一种格式转换为另一种格式,但是如果新代码使用旧的API,则没有明确的答案.
谢谢.
我最近在启动JavaFX应用程序时注意到以下警告:
警告:JavaFX运行时版本8.0.60使用版本8.0.65的JavaFX API加载FXML文档
有问题的FXML是由Gluon Scene Builder 8.1.0创建的,运行它的捆绑Java,版本1.8.0_65.该应用程序是使用我的OS Java 1.8.0_72版启动的.
FXML的根节点确实具有该属性
xmlns="http://javafx.com/javafx/8.0.65"
Run Code Online (Sandbox Code Playgroud)
但我认为1.8.0_72> 1.8.0_65,为什么我收到这条消息呢?这是我应该担心的事情吗?有没有办法问jre什么是JavaFX API版本(显然,它与Java版本不同)?
编辑:
运行James_D建议的代码给出以下结果:
java版本:1.8.0_72-internal
javafx.version:8.0.60
那么,看起来像JDK中的JavaFX版本是错的?或者我可能有一个旧的jfxrt.jar?我会调查一下.
看看Font#loadFont我的文档,我发现了这句话:
此方法不会关闭输入流.
不幸的是,这没有被解释或扩展.所以我的问题是:
API不会关闭输入流的可能原因是什么?您是否可能想重新使用该流?我大多使用这样的方法:
Font.loadFont(getClass().getResourceAsStream("path/to/font"), 13.0);
Run Code Online (Sandbox Code Playgroud)
为了确保我的应用程序可以使用该字体,所以我从不重复使用输入流,我真的不能想到我想要的原因.
我在特定的Windows 7计算机上遇到JavaFX应用程序的问题,非英文文本显示不正确.字体设置为系统无处不在,据我所知应该是Windows 7上的Segoe UI(这确实是这台机器上的默认字体).系统的其他部分(非java)中的所有文本都正确显示,因此字体在那里并具有相应的字符集,这使我相信由于某种原因JavaFX无法加载它,而是使用不同的字体.
我的问题是 - 如何找出JavaFX 在特定系统上实际使用的字体?我试过Font.getDefault().getName()但它只是返回"系统",它什么也没告诉我.使用-Djavafx.verbose=true等等也没有产生任何有价值的东西.
在你问之前 - 是的,应用程序是Unicode,它可以在其他机器上运行,包括windows和linux,没有问题.我想尝试和诊断问题所以我不必诉诸重新安装机器(目前不是一个选项),或戏剧性的东西.
编辑:似乎Segoe UI实际上并不包含那个特定的字符集.尽管如此,系统的其余部分还是可以的.因此,更准确的问题是 - 为什么JavaFX无法实现这一点并使用回退?我如何调试/诊断出现了什么问题?
我在 JavaFX API 中遇到了一个看似特殊的问题:LongPropertyimplements Property<Number>,但不是Property<Long>。
这是什么原因呢?我觉得这一切都源于 Java 固有的协变和逆变问题,因为泛型通过擦除来愚蠢地实现,以保持与字节码的向后兼容性;LongProperty但是同时实施Property<Number> 和 会出现什么问题Property<Long>呢?
编辑:这个问题源于这个问题:Apply LongProperty to TableColumnprogrammatically (vs语义地)