Changed behaviour of Desktop.browse on Windows
Christopher Schnick
crschnick at xpipe.io
Mon Feb 16 21:44:40 UTC 2026
Edit: I meant the behaviour for *Desktop.browse* is now platform
specific and the javadocs are wrong for it.
Furthermore, a good solution to solving this issue properly if security
constraints disallow the normal Desktop.browse method to be used for
arbitrary URLs, would be to add a new method to the Desktop class which
supports this.
On 16/02/2026 22:38, Christopher Schnick wrote:
> There are plenty of applications on Windows that use URL schemes to
> allow for a unified way of launching applications with some arguments.
> In our main app, one application we call via Desktop.browse is the
> Warp Terminal that requires URLs to be properly launched with
> arguments with the warp:// scheme. Other apps we call in some internal
> tools are GitHub Desktop with x-github-client:// and msteams with
> msteams://. But there are plenty more of those URL schemes for all
> kinds of applications out there, and someone is probably going to rely
> on them.
>
> The URLs are manually constructed in the code, e.g. when the user
> wants open a certain session to a system. The use case here is for AWT
> as the FX desktop integration does not have all the features that AWT
> has.
>
> Regardless of specific apps, the change in handling the file:// URLs
> is also a problem. Before, in the code you didn't really need to care
> whether a URL was of a specific type, Desktop.browse launched the
> right application for any URL. Now, I have to check whether it is a
> file URL and use the Desktop.open method instead with the URL path.
> For other types of custom URLs, we resorted to manually calling new
> ProcessBuilder("rundll32", "url.dll,FileProtocolHandler", url) on
> Windows.
>
> The behaviour of Desktop.open is now also platform-specific as this
> does not behave the same way on Linux or macOS. Technically, the
> javadocs for Desktop.browse were already wrong, now they are still
> wrong for the Linux/macOS behaviour.
>
> I also don't see the huge security issue with allowing applications to
> open URLs how they like. If a JVM-based application opens a malicious
> URL from user input without verifying it, the JVM shouldn't prevent
> that as that is an application issue. You could block ProcessBuilder
> from spawning arbitrary programs with the same reasoning if you go
> down that route.
>
> On 16/02/2026 21:43, Philip Race wrote:
>> Can you explain specifically what you used this for and how you
>> obtained the URL passed to the API,
>> and whether it was a user-initiated action ? The specific URL and
>> scheme will help.
>> Also is your specific case FX or AWT ?
>>
>> If any of this is something you consider private/proprietary to your
>> application, you can send me off-list if that works.
>>
>> I'm not promising anything, but it will help if we understand the use
>> case in detail.
>>
>> -phil.
>>
>> On 2/12/26 9:55 AM, Christopher Schnick wrote:
>>> Does anyone have input on this? I had to revert all deployments I
>>> made with JDK 25.0.2 back to JDK 25.0.1 due to it breaking various
>>> different features that relied on opening URLs of specific
>>> applications. The same will probably also apply to many other
>>> applications out there.
>>>
>>> Is there a supported way in JDK 25.0.2 to open an URL with the
>>> associated application instead of the web browser on Windows?
>>>
>>> On 10/02/2026 16:45, Christopher Schnick wrote:
>>>> Hello,
>>>>
>>>> We recently upgraded our application to JDK 25.0.2 and saw a
>>>> changed behaviour in the Desktop.browse method when opening any
>>>> non-http URLs on Windows. Previously, those URLs were opened with
>>>> the default application associated with that URL scheme, now it
>>>> always opens the URL in the web browser, even though it shouldn't
>>>> really do that. Even stuff like file:// URLs are opened in the
>>>> browser.
>>>>
>>>> I saw there were PRs for both the AWT and JavaFX implementation for
>>>> opening URLs, but the related JBS issues are private. So I'm
>>>> guessing some kind of security issue?
>>>>
>>>> Is this the expected behaviour now due to security constraints or
>>>> is this a bug?
>>>>
>>>> Best
>>>> Christopher Schnick
>>>>
>>
More information about the client-libs-dev
mailing list