Would jdeps help to see what dependencies are needed?
Eric Bresie ebre...@gmail.com > On April 18, 2020 at 1:44:43 PM CDT, Michael Paus <m...@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 > > > > > > > > <twi...@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 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >