Windows Installation Instructions, All DLL Files Missing
Kevin Rushforth
kevin.rushforth at oracle.com
Mon Apr 20 12:57:51 UTC 2020
Can you try running your app with the following two flags?
java -Djavafx.verbose=true -Dprism.verbose=true
That might help diagnose the problem.
-- Kevin
On 4/18/2020 11:18 AM, Christopher Miles wrote:
> Yep, that's where I downloaded it from.
>
> > PS C:\Users\cmiles\source\repos\xmltool> java --version
> > openjdk 14.0.1 2020-04-14
> > OpenJDK Runtime Environment (build 14.0.1+7)
> > OpenJDK 64-Bit Server VM (build 14.0.1+7, mixed mode, sharing)
>
> When I look at the "bin" directory that came with the JavaFX SDK and
> compare it to the "bin" directory that comes with OpenJDK there are
> things in the JavaFX distribution that aren't present in the OpenJDK
> distribution. These three caught my attention:
>
> + prism_common.dll
> + prism_d3d.dll
> + prism_sw.dll
>
> I suspect missing these DLL's is what is causing the exception when I
> try to launch my application.
>
> I took a look at "JDK-8207015" and I don't think that is my problem,
> yet. It could be that if the "prism_xxx.dll" files were present, I
> might run into this issue.
>
> I changed my `jlink` command to point at the "mods" as this seems like
> the correct way to do this. Still, the app refuses to launch with the
> same error message.
>
> > Graphics Device initialization failed for : d3d, sw
> > Error initializing QuantumRenderer: no suitable pipeline found
> > java.lang.RuntimeException: java.lang.RuntimeException: Error
> initializing QuantumRenderer: no suitable pipeline found
>
> I would very much like to avoid adding switches to a `java` invocation
> in order to run the application. In your example, I would need to have
> customer installed the JavaFX JDK to a specific location in order for
> that to work. I'd also need to have some kind of wrapper to handle
> other operating systems, like Linux or OS X. My goal is to distribute
> one package with custom launching scripts (i.e. one for batch,
> Powershell, and Linux/OS X shell) as I did under Java 8. This makes me
> think that using `jlink` with the mods is the way to go, as long as I
> can figure out why that is not working.
>
> Thank you for your help with this. :-)
>
> Kevin Rushforth wrote on 4/17/2020 17:34:
>> From where are you getting your OpenJDK build?
>> https://jdk.java.net/14 ? Somewhere else?
>>
>> -- Kevin
>>
>>
>> On 4/17/2020 2:16 PM, Christopher Miles wrote:
>>> Yeah, I've tried it with both. The instructions on the JavaFX page
>>> tell you to add the "lib" directory to the `javac` path and the
>>> "mods" to the `jlink` path. I figured, since nothing is working, why
>>> not try them the other way around? In all cases the results are the
>>> same.
>>>
>>> I'm using OpenJDK, wouldn't that project have the same issue
>>> distributing these DLL files? I would bet they would, since they are
>>> also an open source project. I can run Swing projects, however,
>>> without these DLL files.
>>>
>>> I can give the Oracle JDK a try. I had been shying away from it
>>> since OpenJDK is getting to be so popular. If that works, I will let
>>> the list know.
>>>
>>> As an aside, the JavaFX home page recommends using OpenJDK right now:
>>>
>>> https://openjfx.io/openjfx-docs/#install-java
>>>
>>> Thank you!
>>>
>>> Kevin Rushforth wrote on 4/17/2020 16:51:
>>>> Where are you getting JDK 14.0.1 from? Does it include the
>>>> Microsoft VS2017 DLLs and Windows SDK DLLs in jdk-14.0.1/bin? There
>>>> are 45 of them (40 of them are of the form api-ms-win-*.dll). The
>>>> JavaFX 14.0.1 sdk includes them, but the jmods do not. See
>>>> JDK-8207015 [1] for why not. If the JDK has them, then there should
>>>> be no problem running a jlinked app.
>>>>
>>>> One possible problem is that your jlink line is wrong. You should
>>>> not point to the SDK at all when running jlink. Use the jmods with
>>>> jlink (don't use the sdk). Use the sdk with javac and java
>>>> --module-path (don't use the jmods at all).
>>>>
>>>> Btw, even if you are running a JDK that for some reason doesn't
>>>> have the Microsoft DLLs, you should still be able to run using the
>>>> SDK (directly, not via jlink, which requires the jmods) as follows:
>>>>
>>>> java --module-path "C:\Program Files\Java\javafx-sdk-14\lib"
>>>> --add-modules
>>>> javafx.base,javafx.controls,javafx.fxml,javafx.graphics,javafx.media,javafx.swing,javafx.web
>>>> MyApplication
>>>>
>>>> If this doesn't work without you putting javafx-sdk-14/bin in your
>>>> PATH then something else is wrong.
>>>>
>>>> -- Kevin
>>>>
>>>> [1] https://bugs.openjdk.java.net/browse/JDK-8207015
>>>>
>>>> On 4/17/2020 1:18 PM, Christopher Miles wrote:
>>>>> I have downloaded both the "mods" and the SDK. I put them
>>>>> alongside the JDK on my workstation.
>>>>>
>>>>> C:\Program Files\Java\jdk-14.0.1
>>>>> C:\Program Files\Java\javafx-sdk-14
>>>>> C:\Program Files\Java\javafx-jmods-14.0.1
>>>>>
>>>>> If I remove the path `C:\Program Files\Java\javafx-sdk-14\bin` and
>>>>> point`jlink` at the `C:\Program Files\Java\javafx-jmods-14.0.1`
>>>>> path...
>>>>>
>>>>> jlink --module-path "C:\Program
>>>>> Files\Java\javafx-sdk-14\lib;C:\Program
>>>>> Files\Java\jdk-14.0.1/jmods" --add-modules
>>>>> javafx.base,javafx.controls,javafx.fxml,javafx.graphics,javafx.media,javafx.swing,javafx.web,java.sql,java.base
>>>>> --output C:\Users\cmiles\source\repos\xmltool\target/jlink
>>>>> --strip-debug --no-man-pages --no-header-files --compress=2
>>>>>
>>>>> ...and remove `C:\Program Files\Java\javafx-sdk-14\bin` from my
>>>>> global path, the application builds. When I try to run the
>>>>> application I see the following error.
>>>>>
>>>>> Graphics Device initialization failed for : d3d, sw
>>>>> Error initializing QuantumRenderer: no suitable pipeline found
>>>>>
>>>>> Swapping out the mods path for the SDK "lib" directory has, as far
>>>>> as I can tell, the exact same effect. :-(
>>>>>
>>>>> If I add the path `C:\Program Files\Java\javafx-sdk-14\bin` to my
>>>>> global PATH then it does run successfully.
>>>>>
>>>>> I hear what you're saying but this doesn't seem to be the case...
>>>>>
>>>>> What version of Windows are you using? I don't think this is a
>>>>> Windows 10 specific issue but perhaps there is something platform
>>>>> specific involved.
>>>>>
>>>>> Thank you!
>>>>>
>>>>>
>>>>> Scott Palmer wrote on 4/17/2020 15:23:
>>>>>> I use jlink and jpackage to distribute JavaFX applications.
>>>>>> You suggest there will be a problem if you use jlink, but it will
>>>>>> work if you include the needed javafx modules. The .jmod files
>>>>>> contain the necessary native libraries and jlink will build a JRE
>>>>>> that has the DLLs in the right place for the runtime to find them.
>>>>>>
>>>>>> Modifying your PATH is not the right way to do this. Distributing
>>>>>> a runtime with your application is the right way to solve this.
>>>>>> The jlink and jpackage tools make this fairly easy. I use a
>>>>>> custom Gradle script to bundle my application, it works well.
>>>>>>
>>>>>> Scott
>>>>>>
>>>>>>> On Apr 17, 2020, at 2:55 PM, Christopher Miles
>>>>>>> <twitch at nervestaple.com> wrote:
>>>>>>>
>>>>>>> I manage a project[0] that leverages JavaFX. It's been a while
>>>>>>> since I've worked on this project, almost two years. At that
>>>>>>> time JavaFX was bundled with the Java runtime from Oracle. The
>>>>>>> few customers I had would simply run the application from the
>>>>>>> bundled launcher and as long as they had Java installed, it
>>>>>>> would work.
>>>>>>>
>>>>>>> It's time for me to add some features to the project, I am now
>>>>>>> using OpenJDK 14.0.1 and I installed the OpenJavaFX package and
>>>>>>> followed the instructions[1] from the following URL:
>>>>>>>
>>>>>>> https://openjfx.io/openjfx-docs/#install-javafx
>>>>>>>
>>>>>>> I am on Windows and followed the instructions for that platform.
>>>>>>> Unfortunately, things didn't really work. The error was as follows:
>>>>>>>
>>>>>>> Graphics Device initialization failed for : d3d, sw Error
>>>>>>> initializing QuantumRenderer: no suitable pipeline found
>>>>>>> java.lang.RuntimeException: java.lang.RuntimeException: Error
>>>>>>> initializing QuantumRend erer: no suitable pipeline found at
>>>>>>> javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(Unkno
>>>>>>> wn Source)
>>>>>>>
>>>>>>> I fussed with this and that but nothing made a difference.
>>>>>>> Eventually I tried adding the "bin" directory from the JavaFX
>>>>>>> distribution to my path. This is the entry I added to my global
>>>>>>> PATH variable:
>>>>>>>
>>>>>>> C:\Program Files\Java\javafx-sdk-14\bin
>>>>>>>
>>>>>>> Is this the right way to do this and, if so, why isn't this
>>>>>>> included in the directions? Is this a Windows specific issue?
>>>>>>>
>>>>>>> Also, what impact does this have on distribution of applications?
>>>>>>>
>>>>>>> Looking at the "Runtime Images" instructions, it looks like the
>>>>>>> same issues will be present. Those instructions use `jlink` to
>>>>>>> point to the JavaFX libraries and the JAVAFX modules
>>>>>>> (distributed in another package) but also leave off references
>>>>>>> to the DLL files in the "bin" directory. I am worried that I
>>>>>>> will need to have people manually install the OpenJavaFX
>>>>>>> distribution and add the "bin" directory to their path in order
>>>>>>> to run my application. Please say it's not so!
>>>>>>>
>>>>>>> Any help or pointers to additional documentation would be very
>>>>>>> much appreciated! I have made it over the bumps and can now
>>>>>>> continue development of my application, my next concern is
>>>>>>> distributing it to customers.
>>>>>>>
>>>>>>> --
>>>>>>> Miles
>>>>>>>
>>>>>>> [0]: https://github.com/cmiles74/xmltool
>>>>>>> [1]: https://openjfx.io/openjfx-docs/#install-javafx
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>
>
>
More information about the openjfx-dev
mailing list