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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions