看起来JDK 1.7.0_80中的Thawte根证书被撤销了. https://www.thawte.com/roots/retired.html
使用7u80 jarsigner不再有效,而且几天前工作正常.
/usr/java/jdk1.7.0_80/jre/../bin/jarsigner -keystore /home/build/keystore.p12 -storepass storepass -storetype pkcs12 -tsa https://timestamp.geotrust.com/tsa /home/build/jenkins/workspace/my-gui/target/my-gui-3.0.29-SNAPSHOT.jar comp
jarsigner: unable to sign jar: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
Run Code Online (Sandbox Code Playgroud)
在删除旧证书后,我尝试将Thawtes Timestamping CA证书导入cacerts.
wget https://www.thawte.com/roots/Thawte_Timestamping_CA.pem
/usr/java/jdk1.7.0_80/bin/keytool -import -trustcacerts -alias verisigntsaca -file Thawte_Timestamping_CA.pem -keystore jre/lib/security/cacerts
Enter keystore password:
Trust this certificate? [no]: yes
Certificate was added to keystore
Run Code Online (Sandbox Code Playgroud)
使用JDK 8u60的jarsigner工作,所以我试图将它的cacerts复制到JDK7,但这也不起作用.
由于Javadoc错误,我们无法使用Java 8进行编译.我看到的唯一解决方案是在JDK7中创建符号链接到JDK8 jarsigner.
/usr/java/jdk1.8.0_60/jre/../bin/jarsigner -keystore /home/build/keystore.p12 -storepass storepass -storetype pkcs12 -tsa https://timestamp.geotrust.com/tsa /home/build/jenkins/workspace/my-gui/target/my-gui-3.0.29-SNAPSHOT.jar comp
jar signed.
Run Code Online (Sandbox Code Playgroud)
如果我将tsa从geotrust切换到digicert,它可以正常使用JDK 7,因为它们不使用https. http://timestamp.digicert.com/
JavaFX 对 CSS3 的支持程度如何?根据文档
JavaFX 级联样式表 (CSS) 基于 W3C CSS 版本 2.1 [1],并在版本 3 [2] 的当前工作中添加了一些内容
https://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html#introscenegraph 在这里找不到任何具体内容。
1) 但是,JavaFX 支持多少百分比的 CSS3?
CSS3 规范一定已经出现了,因为这是在 JavaFX CSS 规范中首次提到的。
2) 支持 CSS3 中的什么?
JavaFX CSS 规范中只有一处提到 CSS3。
3) 是否可以将 SASS 与 JavaFX CSS 一起使用?
4) Java 9 在 CSS 支持方面有哪些变化?
自 Java 9 以来 Java 日期和时间 API 发生了变化。 LocalDateTime 现在具有微秒精度。
Java 9 具有 java.time.Clock 的全新实现,能够以比毫秒(十进制小数的三位数字)更精细的分辨率捕获当前时刻。
我们从后端服务中获得以微秒为单位的时间。
System.currentTimeMillis > 1565245051795 > 2019-08-08T06:17:31.795
Service.getTime > 1565245051795306 > 2019-08-08T06:17:31.795306
Run Code Online (Sandbox Code Playgroud)
为了构造在我们的应用程序中使用的 LocalDateTime,我们执行
long timeMicros = service.getTime();
long timeMillis = timeMicros / 1000;
LocalDateTime ldt = Instant.ofEpochMilli(timeMillis).atZone(ZoneId.systemDefault()).toLocalDateTime();
Run Code Online (Sandbox Code Playgroud)
为了查询服务,我们再次需要时间微秒,然后我们做
long timeMillis = dateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
long timeMicros = timeMillis * 1000;
Run Code Online (Sandbox Code Playgroud)
问题是我们没有取回时间微秒的精度。
是否可以创建具有微秒精度的 Instant ?
我们现在使用的是 Java 11。当我们的一个 JUnit 测试由于增加的微秒精度而失败时,我注意到了这一变化。
对于 JUnit 测试,我找到了一个解决方法:
private static final LocalDateTime START = LocalDateTime.now().truncatedTo(ChronoUnit.MILLIS);
Run Code Online (Sandbox Code Playgroud)
我不确定这是一种解决方法还是实际的解决方案,但添加时间戳的最后三微秒数字似乎有效。
System.currentTimeMillis > 1565245051795 > 2019-08-08T06:17:31.795
Service.getTime > …
Run Code Online (Sandbox Code Playgroud) 这与三年前提出的先前问题有关。 JavaFX 8-在右侧的TitledPane中添加图形
我不喜欢这种解决方案,也没有找到其他解决方案。
自从最初的问题要求JavaFX 8以来,JavaFX发生了很多事情。最近发布了JavaFX 11。
我有一个使用JavaFX 11的项目。TitledPane图形设置有HBox,该HBox包含一个我想放置在标题最右侧的按钮。
TitledPane titledPane = new TitledPane();
titledPane.setText("Title");
HBox titleBox = new HBox();
Button b1 = new Button("ClickMe!");
titleBox.getChildren().add(b1);
titledPane.setGraphic(titleBox);
titledPane.setContentDisplay(ContentDisplay.RIGHT);
Run Code Online (Sandbox Code Playgroud)
将TitlePane Alignment设置为CENTER_RIGHT会将标题放置在右侧,但是将整个标题,文本和图形放置在右侧。
titledPane.setAlignment(Pos.CENTER_RIGHT);
Run Code Online (Sandbox Code Playgroud)
我已经尝试过在TitledPane图形,HBox,GridPane中使用不同的容器。设置增长,对齐,fillWidth等。没有任何作用。
没有设置人为的图形间隙,我看不到可行的解决方案,但是上述参考问题中提出了该建议。这是一个丑陋的骇客。适用于加速中的多个TitleedPanes。但是,Button并未放置在确切的末端,标题右侧仍然有更多空间。
primaryStage.setOnShown(e -> {
for (TitledPane titledPane : panes) {
Node titleRegion = titledPane.lookup(".title");
Insets padding = ((StackPane) titleRegion).getPadding();
double graphicWidth = titledPane.getGraphic().getLayoutBounds().getWidth();
double arrowWidth = titleRegion.lookup(".arrow-button").getLayoutBounds().getWidth();
double labelWidth = titleRegion.lookup(".text").getLayoutBounds().getWidth();
double nodesWidth = graphicWidth + padding.getLeft() + padding.getRight() + arrowWidth + labelWidth;
titledPane.graphicTextGapProperty().bind(titledPane.widthProperty().subtract(nodesWidth));
}
});
Run Code Online (Sandbox Code Playgroud) JavaFX 应用程序线程。我能找到的消息来源说节点上的所有更新都必须在这个线程中发生。
我正在尝试查找有关此规则的文档,以及此规则是否有任何例外。 https://docs.oracle.com/javase/8/javafx/interoperability-tutorial/concurrency.htm 正如它所说:
JavaFX 场景图表示 JavaFX 应用程序的图形用户界面,它不是线程安全的,只能从 UI 线程(也称为 JavaFX 应用程序线程)访问和修改。
https://docs.oracle.com/javase/8/javafx/get-started-tutorial/jfx-architecture.htm#A1107438
任何“实时”场景,即属于窗口一部分的场景,都必须从此线程访问。可以在后台线程中创建和操作场景图,但是当其根节点附加到场景中的任何活动对象时,必须从 JavaFX 应用程序线程访问该场景图。
我曾经历过,并非节点上的所有更新都必须在 JavaFX AT 上完成。一些更新节点的调用在该线程之外工作正常。例如,更新 Text textProperty 不需要在 JavaFX AT 中运行。因此,它看起来不像设置工具提示,或者改变可见性/禁用/管理。
JavaFX AT 之外的 Label textProperty 更新将抛出一个
IllegalStateException:不在 FX 应用程序线程上;当前线程 = 任务