Windows Installation Instructions, All DLL Files Missing

Michael Paus mp at jugs.org
Mon Apr 20 06:51:44 UTC 2020


Yes, that's what I use in my example together with jlink and jpackage.

Am 20.04.20 um 03:55 schrieb Eric Bresie:
> Would jdeps help to see what dependencies are needed?
>
> Eric Bresie
> Ebresie at gmail.com
>> On April 18, 2020 at 1:44:43 PM CDT, Michael Paus <mp at jugs.org> wrote:
>> Hi Christopher,
>> I do not know what your specific problem is but maybe you just have to
>> shift your goals a little bit.
>> Continuing like you did in the Java 8 days is not a good idea for
>> various reasons. The current trend
>> for distributing desktop software with Java is to build a platform
>> specific installer. The tools for that
>> are all there. Just give it a try. Together with Dirk Lemmermann I have
>> set up a working example
>> and tutorial on GitHub. It uses the latest Java/JavaFX and works on Mac
>> and Windows (should also work
>> on Linux but I haven't tested it.)
>> <https://github.com/dlemmermann/JPackageScriptFX>
>> The nice thing about this approach is that your customer does not have
>> to have anything installed on his
>> own machine. He can just install your software like he would install any
>> other piece of software.
>> Michael
>>
>> Am 18.04.20 um 20:18 schrieb Christopher Miles:
>>> 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