Index: src/org/openstreetmap/josm/tools/PlatformHook.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/tools/PlatformHook.java b/src/org/openstreetmap/josm/tools/PlatformHook.java
--- a/src/org/openstreetmap/josm/tools/PlatformHook.java	(revision 18579)
+++ b/src/org/openstreetmap/josm/tools/PlatformHook.java	(date 1666286985644)
@@ -300,12 +300,65 @@
             // #17831 WebStart may be launched with an expired JRE but then launching JOSM with up-to-date JRE
             if (latestVersion == null || !latestVersion.equalsIgnoreCase(currentVersion)) {
                 callback.askUpdateJava(latestVersion != null ? latestVersion : "latest",
-                        Config.getPref().get("java.update.url", "https://www.java.com/download"),
+                        Config.getPref().get("java.update.url", getJavaUrl()),
                         DateUtils.getDateFormat(DateFormat.MEDIUM).format(expiration), false);
             }
         }
     }
 
+    /**
+     * Checks if we will soon not be supporting the running version of Java
+     * @param callback Java expiration callback
+     * @since xxx
+     */
+    default void warnSoonToBeUnsupportedJava(JavaExpirationCallback callback) {
+        // Java 11 is our next minimum version, and OpenWebStart should be replacing Oracle WebStart
+        // We'd go to 17, but some Linux distributions (Debian) default to Java 11.
+        if (Utils.getJavaVersion() < 11 && !Utils.isRunningWebStart()) {
+            String latestVersion = Utils.getJavaLatestVersion();
+            String currentVersion = Utils.getSystemProperty("java.version");
+            // #17831 WebStart may be launched with an expired JRE but then launching JOSM with up-to-date JRE
+            if (latestVersion == null || !latestVersion.equalsIgnoreCase(currentVersion)) {
+                callback.askUpdateJava(latestVersion != null ? latestVersion : "latest",
+                        Config.getPref().get("java.update.url", getJavaUrl()),
+                        null, Utils.getJavaVersion() < 17);
+            }
+        }
+    }
+
+    /**
+     * Get the Java download URL (really shouldn't be used outside of JOSM startup checks)
+     * @return The download URL to use.
+     * @since xxx
+     */
+    default String getJavaUrl() {
+        StringBuilder defaultDownloadUrl = new StringBuilder("https://www.azul.com/downloads/?version=java-17-lts&package=jre-fx");
+        if (PlatformManager.isPlatformWindows()) {
+            defaultDownloadUrl.append("&os=windows");
+        } else if (PlatformManager.isPlatformOsx()) {
+            defaultDownloadUrl.append("&os=macos");
+        } // else probably `linux`, but they should be using a package manager.
+        // For available architectures, see
+        // https://github.com/openjdk/jdk/blob/master/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/utilities/PlatformInfo.java#L53
+        String osArch = System.getProperty("os.arch");
+        if (osArch != null) {
+            // See https://learn.microsoft.com/en-us/windows/win32/winprog64/wow64-implementation-details#environment-variables
+            // for PROCESSOR_ARCHITEW6432
+            if ("x86_64".equals(osArch) || "amd64".equals(osArch)
+                    || "AMD64".equalsIgnoreCase(System.getenv("PROCESSOR_ARCHITEW6432"))) {
+                defaultDownloadUrl.append("&architecture=x86-64-bit");
+            } else if ("aarch64".equals(osArch)) {
+                defaultDownloadUrl.append("&architecture=arm-64-bit");
+            } else if ("x86".equals(osArch)) {
+                // Honestly, just about everyone should be on x86_64 at this point. But just in case someone
+                // is running JOSM on a 10-year-old computer. They'd probably be better off running a RPi.
+                defaultDownloadUrl.append("&architecture=x86-32-bit");
+            } // else user will have to figure it out themselves.
+        }
+        defaultDownloadUrl.append("#download-openjdk"); // Scrolls to download section
+        return defaultDownloadUrl.toString();
+    }
+
     /**
      * Checks if we run Oracle Web Start, proposes to user to migrate to OpenWebStart.
      * @param callback WebStart migration callback
Index: src/org/openstreetmap/josm/tools/PlatformHookOsx.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/tools/PlatformHookOsx.java b/src/org/openstreetmap/josm/tools/PlatformHookOsx.java
--- a/src/org/openstreetmap/josm/tools/PlatformHookOsx.java	(revision 18579)
+++ b/src/org/openstreetmap/josm/tools/PlatformHookOsx.java	(date 1666279473131)
@@ -94,6 +94,7 @@
             // We'll just ignore this for now. The user will still be able to close JOSM by closing all its windows.
             Logging.warn("Failed to register with macOS: " + ex);
         }
+        warnSoonToBeUnsupportedJava(javaCallback);
         checkExpiredJava(javaCallback);
         checkWebStartMigration(webStartCallback);
     }
Index: src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java b/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java
--- a/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java	(revision 18579)
+++ b/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java	(date 1666275383997)
@@ -188,6 +188,8 @@
             return getPackageDetails("openjdk-10-jre", "java-10-openjdk");
         } else if (home.contains("java-11-openjdk")) {
             return getPackageDetails("openjdk-11-jre", "java-11-openjdk");
+        } else if (home.contains("java-17-openjdk")) {
+            return getPackageDetails("openjdk-17-jre", "java-17-openjdk");
         } else if (home.contains("java-openjdk")) {
             return getPackageDetails("java-openjdk");
         } else if (home.contains("icedtea")) {
Index: src/org/openstreetmap/josm/tools/PlatformHookWindows.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/tools/PlatformHookWindows.java b/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
--- a/src/org/openstreetmap/josm/tools/PlatformHookWindows.java	(revision 18579)
+++ b/src/org/openstreetmap/josm/tools/PlatformHookWindows.java	(date 1666279485193)
@@ -154,6 +154,7 @@
 
     @Override
     public void startupHook(JavaExpirationCallback javaCallback, WebStartMigrationCallback webStartCallback) {
+        warnSoonToBeUnsupportedJava(javaCallback);
         checkExpiredJava(javaCallback);
         checkWebStartMigration(webStartCallback);
     }
Index: src/org/openstreetmap/josm/tools/Utils.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/org/openstreetmap/josm/tools/Utils.java b/src/org/openstreetmap/josm/tools/Utils.java
--- a/src/org/openstreetmap/josm/tools/Utils.java	(revision 18579)
+++ b/src/org/openstreetmap/josm/tools/Utils.java	(date 1666275647768)
@@ -1805,9 +1805,15 @@
                             "java.baseline.version.url",
                             Config.getUrls().getJOSMWebsite() + "/remote/oracle-java-update-baseline.version")))
                     .connect().fetchContent().split("\n", -1);
-            if (getJavaVersion() <= 8) {
+            if (getJavaVersion() <= 11 && isRunningWebStart()) { // OpenWebStart currently only has Java 11
                 for (String version : versions) {
-                    if (version.startsWith("1.8")) {
+                    if (version.startsWith("11")) {
+                        return version;
+                    }
+                }
+            } else if (getJavaVersion() <= 17) {
+                for (String version : versions) {
+                    if (version.startsWith("17")) { // Use current Java LTS
                         return version;
                     }
                 }
