Skip to content

[BUG] Cryptic "No suitable pipeline found" crash when running on JRE without JavaFX #277

@mgaffigan

Description

@mgaffigan

Description

When users attempt to run the Mirth Connect Client using a JRE that does not include JavaFX (e.g., Standard SE distributions), the application crashes deep in the initialization process. Instead of a clear warning, users are met with an unclear warning. Log output is a complex stack trace that makes it difficult to diagnose the environment issue.

Steps to Reproduce

  1. Install a JRE that excludes JavaFX (e.g., standard Oracle JRE or Zulu SE).
  2. Launch the Client.
  3. Login

Actual Behavior

The application crashes with the following error:

image

Console output:

InteropFactory: cannot load com.sun.javafx.embed.swing.newimpl.InteropFactoryN
Graphics Device initialization failed for :  es2, sw
Error initializing QuantumRenderer: no suitable pipeline found
java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
	at com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
	at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:222)
	at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
	at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
	at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
	at javafx.embed.swing.JFXPanel.initFx(JFXPanel.java:251)
	at javafx.embed.swing.JFXPanel.<init>(JFXPanel.java:267)
	at com.mirth.connect.client.ui.components.tag.MirthTagField.initComponents(MirthTagField.java:135)
	at com.mirth.connect.client.ui.components.tag.MirthTagField.<init>(MirthTagField.java:84)
	at com.mirth.connect.client.ui.ChannelPanel.initComponents(ChannelPanel.java:3374)
	at com.mirth.connect.client.ui.ChannelPanel.<init>(ChannelPanel.java:204)
	at com.mirth.connect.client.ui.Frame.setupFrame(Frame.java:562)
	at com.mirth.connect.client.ui.Mirth.<init>(Mirth.java:60)
	at com.mirth.connect.client.ui.LoginPanel$8.handleSuccess(LoginPanel.java:561)
	at com.mirth.connect.client.ui.LoginPanel$8.doInBackground(LoginPanel.java:450)
	at com.mirth.connect.client.ui.LoginPanel$8.doInBackground(LoginPanel.java:419)
	at java.desktop/javax.swing.SwingWorker$1.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.desktop/javax.swing.SwingWorker.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
	at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
	at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
	... 1 more
java.lang.RuntimeException: No toolkit found
	at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272)
	at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
	at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
	at javafx.embed.swing.JFXPanel.initFx(JFXPanel.java:251)
	at javafx.embed.swing.JFXPanel.<init>(JFXPanel.java:267)
	at com.mirth.connect.client.ui.components.tag.MirthTagField.initComponents(MirthTagField.java:135)
	at com.mirth.connect.client.ui.components.tag.MirthTagField.<init>(MirthTagField.java:84)
	at com.mirth.connect.client.ui.ChannelPanel.initComponents(ChannelPanel.java:3374)
	at com.mirth.connect.client.ui.ChannelPanel.<init>(ChannelPanel.java:204)
	at com.mirth.connect.client.ui.Frame.setupFrame(Frame.java:562)
	at com.mirth.connect.client.ui.Mirth.<init>(Mirth.java:60)
	at com.mirth.connect.client.ui.LoginPanel$8.handleSuccess(LoginPanel.java:561)
	at com.mirth.connect.client.ui.LoginPanel$8.doInBackground(LoginPanel.java:450)
	at com.mirth.connect.client.ui.LoginPanel$8.doInBackground(LoginPanel.java:419)
	at java.desktop/javax.swing.SwingWorker$1.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
	at java.desktop/javax.swing.SwingWorker.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)

Expected Behavior

The application should detect the absence of JavaFX during startup and provide a user-friendly error message explaining that a JavaFX-enabled JRE is required.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions