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
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > > >
> > >
> >
> >
>

Reply via email to