小编DJV*_*ing的帖子

具有https tsa的JDK 1.7 jarsigner不再有效

看起来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/

java jarsigner jdk1.7

6
推荐指数
1
解决办法
3282
查看次数

JavaFX 中对 CSS3 的支持程度

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 支持方面有哪些变化?

css javafx javafx-8

4
推荐指数
1
解决办法
1330
查看次数

从微秒创建 Java DateTime Instant

自 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)

java java-time java-9 java.time.instant java-11

3
推荐指数
1
解决办法
2651
查看次数

JavaFX 11:将图形添加到右侧的TitledPane

这与三年前提出的先前问题有关。 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)

java javafx javafx-8 javafx-11

2
推荐指数
1
解决办法
573
查看次数

在应用程序线程外更新 JavaFX Live 节点

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 应用程序线程上;当前线程 = 任务

javafx javafx-8

0
推荐指数
1
解决办法
463
查看次数