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