On Mon, 17 Aug 2026 10:38:12 GMT, Pabulaner IV <[email protected]> wrote:

>> # Problem description
>> 
>> When You create a JavaFX native application with *jpackage* for macOS You 
>> will run into an issue when trying to handle URIs. When Your application 
>> isn’t running and You have it registered for handling certain types of URIs 
>> it won’t receive the first URI. 
>> 
>> ## Here is a simple example: 
>> 
>> If You have a JavaFX application that handles URIs for example of the form 
>> *openurifx://your-content* and You have it installed with *jpackage* for 
>> macOS and now You try to handle an URI by running the following command: 
>> 
>> ``` open openurifx://hello-world ``` 
>> 
>> The application will open, but it won’t receive the above URI. If You call 
>> the same command after the application is already running, everything will 
>> work fine and the application will receive the URI.
>> 
>> # Problem cause
>> 
>> The cause of the problem is that when You build a JavaFX application and 
>> want to handle URIs You will have to combine JavaFX and AWT as AWT provides 
>> the URI handling capabilities. So the startup process is as follows:
>> 
>> 1. JavaFX is initialized
>> 2. JavaFX forwards the URI event to AWT
>> 3. AWT is initialized 
>> 4. AWT is ready to handle URI events from JavaFX
>> 
>> The issue is that the URI event is delivered before AWT can handle it and 
>> therefore is simple dropped. That’s why later URIs will be received and are 
>> handled properly. 
>> 
>> # Fix
>> 
>> The fix is that JavaFX will call Toolkit.getDefaultToolkit() once before 
>> forwarding an URI event. This way JavaFX can be sure that AWT is initialized 
>> and able to handle the event correctly. The needed change takes place inside 
>> the native code in GlassApplication.m on the MacOS side and is solved with 
>> reflection. 
>> 
>> # Tests
>> 
>> To test the error and the fix You can clone this repository: 
>> https://github.com/pabulaner/openurifx and checkout the branch *first-url*. 
>> There You will find a README.md with further instructions.
>> 
>> PR inside the JDK: https://github.com/openjdk/jdk/pull/31791
>> 
>> - [x] I confirm that I make this contribution in accordance with the 
>> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai).
>
> Pabulaner IV has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   8198549: Desktop.setOpenURIHandler() only receives event if application is 
> already launched

Thanks for the reply! I implemented it and now AWT is initialized on the Java 
side, taking into account the possibility of a deadlock. I hope I implemented 
it the way You intended it, looking forward to Your feedback. 

Also what kind of test would You expect me to implement? Is it just copying the 
shell scripts I currently use and adapt them or something entirely different? 
Or maybe You have an example test that is already implemented in JFX and that I 
can take as a starting point.

-------------

PR Comment: https://git.openjdk.org/jfx/pull/2203#issuecomment-6286228736

Reply via email to