> # 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

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

Changes:
  - all: https://git.openjdk.org/jfx/pull/2203/files
  - new: https://git.openjdk.org/jfx/pull/2203/files/4323f151..b2674a74

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jfx&pr=2203&range=02
 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=2203&range=01-02

  Stats: 66 lines in 4 files changed: 58 ins; 3 del; 5 mod
  Patch: https://git.openjdk.org/jfx/pull/2203.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/2203/head:pull/2203

PR: https://git.openjdk.org/jfx/pull/2203

Reply via email to