使用 JPackage,我无法获得 --win-console 选项来为主启动器单独工作,但我希望主启动器不输出到控制台,但有一个可以输出到控制台的调试版本。
即如果我跑
jpackage --add-launcher SongKongDebug=jpackage.properties @jpackage.txt
Run Code Online (Sandbox Code Playgroud)
jpackage.txt
-i C:\Code\jthink\SongKong\target\songkong-6.10
--runtime-image C:\code\jthink\songkong\JVM64
--main-class com.jthink.songkong.cmdline.SongKong
--name SongKong
--win-dir-chooser
--main-jar lib\SongKong-6.10.jar
--app-version 6.10
--install-dir Jthink\SongKong
--copyright "Copyright 2020 JThink Ltd, United Kingdom"
--license-file C:\Code\jthink\SongKong\src\main\scripts\license.txt
--java-options "-Dhttps.protocols=TLSv1.1,TLSv1.2"
--java-options "--add-opens java.base/java.lang=ALL-UNNAMED"
--java-options "-XX:MaxRAMPercentage=75.0"
--java-options "-XX:MetaspaceSize=45 "
--java-options "-Dcom.mchange.v2.log.MLog=com.mchange.v2.log.jdk14logging.Jdk14MLog"
--java-options "-Dorg.jboss.logging.provider=jdk"
--java-options "-Djava.util.logging.config.class=com.jthink.songkong.logging.StandardLogging"
--vendor JThink
--win-menu
--win-shortcut
--win-menu-group Jthink
Run Code Online (Sandbox Code Playgroud)
jpackage.properties
win-console=--win-console
Run Code Online (Sandbox Code Playgroud)
然后 SongKong 和 SongKongDebug 都在没有控制台的情况下运行
我还尝试修改 jpackage.properties (这意味着名称/值对)以
--win-console
Run Code Online (Sandbox Code Playgroud)
但还是没用
而如果我添加
--win-console
Run Code Online (Sandbox Code Playgroud)
到 jpackage.txt 和
win-console
Run Code Online (Sandbox Code Playgroud)
到 jpackage.properties
那么SongKong将作为控制台运行,而SongKongDebug …
我一直在使用 JLink 为各种 Spring Boot 应用程序创建最小的 JRE。通过反复试验找出所需的模块,我已经成功地手动完成了这项工作。成功执行此操作后,我一直在尝试使用 JDeps 自动执行此过程。
第一次尝试是为我的应用程序扫描构建的 Jar。我正在使用 Java 14 jdeps 来分析 Java 11 代码库。
jdeps --class-path BOOT-INF/classes --module-path BOOT-INF/lib/,${JAVA_HOME}/jmods --add-modules=ALL-MODULE-PATH --list-deps target/camel-account-sapi-0.0.2-SNAPSHOT.jar
这会导致几个未找到的依赖项。
Error: Missing dependencies: classes not found from the module path and classpath.
To suppress this error, use --ignore-missing-deps to continue.
camel-account-sapi-0.0.2-SNAPSHOT.jar
com.ms3.camelaccountsapi.CamelAccountSapiApplication -> org.springframework.boot.SpringApplication not found
com.ms3.camelaccountsapi.CamelAccountSapiApplication -> org.springframework.boot.autoconfigure.SpringBootApplication not found
com.ms3.camelaccountsapi.CamelAccountSapiApplication -> org.springframework.context.ConfigurableApplicationContext not found
com.ms3.camelaccountsapi.routes.GeneratedRoutesInterface -> org.apache.camel.builder.RouteBuilder not found
com.ms3.camelaccountsapi.routes.GeneratedRoutesInterface -> org.apache.camel.model.rest.RestDefinition not found
com.ms3.camelaccountsapi.routes.GeneratedRoutesInterface -> org.apache.camel.model.rest.RestOperationParamDefinition not found
com.ms3.camelaccountsapi.routes.GeneratedRoutesInterface -> …Run Code Online (Sandbox Code Playgroud) Java 14 带来了记录,这是许多函数式语言中的一个很好的补充:
爪哇:
public record Vehicle(String brand, String licensePlate) {}
Run Code Online (Sandbox Code Playgroud)
毫升:
type Vehicle =
{
Brand : string
LicensePlate : string
}
Run Code Online (Sandbox Code Playgroud)
在 ML 语言中,可以通过创建一个更改了一些值的副本来“更新”记录:
let u =
{
Brand = "Subaru"
LicensePlate = "ABC-DEFG"
}
let v =
{
u with
LicensePlate = "LMN-OPQR"
}
// Same as:
let v =
{
Brand = u.Brand
LicensePlate = "LMN-OPQR"
}
Run Code Online (Sandbox Code Playgroud)
这在 Java 14 中可能吗?
我试图让 IntelliJ 与 SDK-14 一起工作,但我显然在让记录工作时遇到了问题。由于发布日期是在 3 月,我认为 Jetbrains 的好人已经接近拥有一个适用于 SDK-14 的版本。我需要使用 --enable-preview 运行 SDK 14。我在谷歌上搜索了几天没有任何运气。
我在 Sublime 上有一些运气,但我错过了代码完成。如果还有其他选择,请随时提及。
我最近将 Java 11 应用程序移植到新发布的 Java 14 (ZuluJDK)。当尝试通过命令行使用新的 JPackage 打包我们的应用程序时,无论我使用哪个 jpackage 命令,唯一发生的事情是以下输出:
WARNING: Using incubator modules: jdk.incubator.jpackage
14
Run Code Online (Sandbox Code Playgroud)
一个示例命令(审查了一些内容,由 < > 占位符表示...):
jpackage --type app-image --verbose --input <path> --main-class <class> --main-jar ./<name>.jar --output runtime-image --name "<name>" --version 2.0.0 --vendor "<company>" --icon <icon-path>.ico
Run Code Online (Sandbox Code Playgroud)
有人可以帮我看看这是什么原因造成的吗?sdk版本的Output并没有提供太多帮助。
给定一个带有 final 字段的简单类,例如 a String(参见下面的示例)或 Spring 依赖项,使用 Java 14 记录使其更简洁并可能删除 Lombok 等注释处理器是个好主意吗?
根据JEP描述记录,“记录使语义声明成为其数据的简单、透明的持有者”。
显然,只有 final 字段的泛型类并不是其数据的透明持有者,并且在使用记录时,其final变量是公开的,这可能是不可取的。但是,在许多情况下,这可能不是主要问题。
因此,这是否“足以”将其视为对该语言功能的“滥用”?或者还有其他不那么明显的缺点吗?
@RequiredArgsConstructor // or an explicit constructor when not using lombok
class AudienceValidator implements OAuth2TokenValidator<Jwt> {
private final String audience;
public OAuth2TokenValidatorResult validate(Jwt jwt) {
// validate
}
}
record AudienceValidator(String audience) implements OAuth2TokenValidator<Jwt> {
public OAuth2TokenValidatorResult validate(Jwt jwt) {
// validate
}
}
Run Code Online (Sandbox Code Playgroud) 我有一些非常菜鸟的问题。我尝试在 OpenJDK 14 中使用 jpackage 为我的测试应用程序创建安装。这是我所做的:
首先,创建自定义 JRE
jlink --module-path "C:\Java\javafx-sdk-14\lib" --add-modules javafx.controls,javafx.fxml --output hello\myjre
Run Code Online (Sandbox Code Playgroud)
那是成功的。我从运行配置中从我的 Eclipse 中复制了参数。之后使用 jpackage 进行安装
jpackage --name HelloFX --input hello --main-jar HelloFX.jar --runtime-image hello\myjre
Run Code Online (Sandbox Code Playgroud)
创建了 .msi 文件,我运行它并在我的 Win10 应用程序中创建了条目。当然,我不知道如何在 windows 菜单中找到它,但它放在我的 C:\Program Files\HelloFX 中。我找到了带有 Duke 图像的图标和应用程序文件,当我尝试运行应用程序时,会弹出“无法启动 JVM”消息。
有人可以帮助我,我做错了什么?我真的很想完成这项工作并深入研究 JavaFX。
我最近决定从我正在使用的 JDK 切换到更新版本。(特别是从jdk1.8.0_261到jdk-14.0.2)。这次升级非常顺利,因为大多数功能都按照我预期的方式工作,并且我能够找到如何调整以适应任何不一样的情况。
然而,如标题所示,我在编写使用 Swing 的特定应用程序时遇到了问题。我的主显示器是 4k 显示器,我已将该显示器的 Windows 系统缩放设置为 200%。虽然每个其他 Swing 应用程序都可以缩放以匹配 DPI 设置,但对于这个特定的应用程序,我想禁用该缩放并按 1:1 绘制像素,尤其是当此应用程序是分布式的时。
有没有办法通过 VM 参数禁用这种自动缩放?或者有没有办法在调用 Swing 库之前在运行时禁用缩放?(类似于必须在对库进行任何其他调用之前对外观进行任何更改。)
以供参考:
这是我用来创建 JFrame 并创建我在其上绘制所有内容的图形对象的代码,这发生在此类和本问题范围之外的定时循环中。
public class ScreenManager {
private GraphicsDevice device;
private final JFrame frame;
private static ScreenManager instance;
public ScreenManager() {
instance = this;
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
this.device = env.getDefaultScreenDevice();
this.frame = new JFrame(game.getGame().gameName());
this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.frame.setUndecorated(true);
this.frame.setIgnoreRepaint(true);
this.frame.setResizable(false);
this.device.setFullScreenWindow(frame);
this.device.setDisplayMode(device.getDisplayMode());
this.frame.createBufferStrategy(2);
}
public Graphics2D getRenderGraphics() {
Window window = device.getFullScreenWindow();
if (window …Run Code Online (Sandbox Code Playgroud) 我正在将 Android 应用程序移植到 javaFX 以进行 Windows 部署,我对 javaFX 和桌面部署很陌生,但对 java 来说并不陌生。
该应用程序包含一个 WebView,它加载通过 Json 从服务器获取的 url(因此本质上可以是任何内容)。
openJDK 14、openJfx 16、intellij idea Ultimate 2021.1.3、gradle:插件:org.beryx.jlink 和 org.openjfx.javafxplugin
当我在开发和测试中(在 Windows 10 计算机上)运行该程序时,效果很好,但是当它在 Windows 计算机(到目前为止的任何 Windows 10)上打包和部署时,我得到一个“java.lang.Throwable:SSL 握手”加载页面时出现“失败”异常。
这是堆栈跟踪:
[ERROR] 2021-07-14 14:13:53.737 [JavaFX Application Thread] MediaElementWeb - WebView Failed:
java.lang.Throwable: SSL handshake failed
at javafx.scene.web.WebEngine$LoadWorker.describeError(WebEngine.java:1440) ~[javafx.web:?]
at javafx.scene.web.WebEngine$LoadWorker.dispatchLoadEvent(WebEngine.java:1379) ~[javafx.web:?]
at javafx.scene.web.WebEngine$PageLoadListener.dispatchLoadEvent(WebEngine.java:1240) ~[javafx.web:?]
at com.sun.webkit.WebPage.fireLoadEvent(WebPage.java:2524) ~[javafx.web:?]
at com.sun.webkit.WebPage.fwkFireLoadEvent(WebPage.java:2369) ~[javafx.web:?]
at com.sun.webkit.network.URLLoaderBase.twkDidFail(Native Method) ~[javafx.web:?]
at com.sun.webkit.network.URLLoader.notifyDidFail(URLLoader.java:799) ~[javafx.web:?]
at com.sun.webkit.network.URLLoader.lambda$didFail$6(URLLoader.java:782) ~[javafx.web:?]
at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:447) ~[javafx.graphics:?]
at java.security.AccessController.doPrivileged(AccessController.java:391) ~[?:?]
at …Run Code Online (Sandbox Code Playgroud) 我尝试按照以下位置的说明使用 JavaFX:
https://openjfx.io/openjfx-docs/下的“JavaFX 和 IntelliJ”->“非模块化 Maven”
完成步骤 1 和 2(安装和验证)后,我尝试从 IntelliJ 而不是通过 Maven 插件运行一个非常简单的程序。
TraderWindow.java
public class TraderWindow extends Application {
@SneakyThrows
public static void main(String[] args) {
launch(args);
}
@Override
@SneakyThrows
public void start(Stage primaryStage) {
Scene scene = FXMLLoader.load(getClass().getResource("/TraderWindow.fxml"));
primaryStage.setScene(scene);
primaryStage.show();
}
}
Run Code Online (Sandbox Code Playgroud)
交易窗口.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" …Run Code Online (Sandbox Code Playgroud) java-14 ×10
java ×8
javafx ×3
jpackage ×3
java-record ×2
command-line ×1
deployment ×1
editor ×1
jar ×1
java-11 ×1
java-9 ×1
java-platform-module-system ×1
javafx-11 ×1
jdeps ×1
jlink ×1
ssl ×1
swing ×1