Windows Installation Instructions, All DLL Files Missing

Michael Paus mp at jugs.org
Sat Apr 18 18:44:43 UTC 2020


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