我希望确定 Java 是否在 Windows 上运行,并且看到了许多不同的建议,其中包括 System 属性os.name与 startsWith/ indexOf/ contains/ toLowerCase(Locale.ENGLISH)/toLowerCase()或仅 的各种排列File.separatorChar。
我扫描了 JDK 源代码,看看是否有明确的答案(见下文)以及其他一些 SO 帖子表明:
String os = System.getProperty("os.name" /**, "<Surely os.name is never null?>" */);
List<Boolean> isWindows = List.of(
os.startsWith("Windows"),
os.contains("Windows"),
os.toLowerCase().startsWith("windows"),
os.toLowerCase().contains("windows"),
os.toLowerCase(Locale.ENGLISH).contains("windows"),
os.toLowerCase(Locale.ENGLISH).startsWith("windows"),
File.separatorChar == '\\'
);
System.out.println("os.name ="+os);
System.out.println("os.name(UTF-8)="+Arrays.toString(os.getBytes(StandardCharsets.UTF_8)));
System.out.println("isWindows ="+isWindows);
Run Code Online (Sandbox Code Playgroud)
是否有任何操作系统/语言安装的排列会isWindows使用上述条件错误地识别,其中真/假不一致或错误?
// For Windows I would expect all true, such as:
os.name =Windows 10
os.name(UTF-8)=[87, 105, 110, 100, 111, 119, 115, …Run Code Online (Sandbox Code Playgroud) 当我尝试在适用于 Linux WSL2 / Ubuntu 20.04 的 Windows 子系统上运行 JavaFX 15 应用程序时,我遇到了困难,需要有关后续尝试步骤的建议。
到目前为止,我已经能够在 WSL 内运行我通常在 Windows/JDK15 上执行的所有 Java 构建,包括那些具有 Swing/AWT 依赖项的构建。AWT / Swing 测试应用程序在 WSL 中成功运行并引用 JDK15,并在 Windows 10 上运行 X Windows。但是我无法运行任何 JavaFX 应用程序,甚至是HelloFX示例:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class HelloFX extends Application {
public void start(Stage stage) {
String javaVersion = System.getProperty("java.version");
String javafxVersion = System.getProperty("javafx.version");
Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " …Run Code Online (Sandbox Code Playgroud)