Empty JavaFX window on some systems - javafx

I created a simple JavaFX application that compiles to binary using GraalVM with the Gluon maven plugin. However, the binary shows an empty window on some systems (for example, a fresh installed linux desktop). The compilation was made using a Github Action which runs mvn -Pdesktop gluonfx:build gluonfx:package.
Why does the binary only runs on some Linux systems?
The pom.xml configuration (full file here):
<plugin>
<groupId>com.gluonhq</groupId>
<artifactId>gluonfx-maven-plugin</artifactId>
<version>1.0.4</version>
<configuration>
<mainClass>com.alinares.colorselectorfx.App</mainClass>
<enableSWRendering>true</enableSWRendering>
<nativeImageArgs>
<arg>-Dprism.verbose=true</arg>
</nativeImageArgs>
</configuration>
</plugin>
Stacktrace:
WARNING: Unsupported JavaFX configuration: classes were loaded from 'unnamed module #1edfedf1'
java.lang.UnsatisfiedLinkError: com.sun.pisces.JavaSurface.initialize(III)V [symbol: Java_com_sun_pisces_JavaSurface_initialize or Java_com_sun_pisces_JavaSurface_initialize__III]
at com.oracle.svm.jni.access.JNINativeLinkage.getOrFindEntryPoint(JNINativeLinkage.java:153)
at com.oracle.svm.jni.JNIGeneratedMethodSupport.nativeCallAddress(JNIGeneratedMethodSupport.java:57)
at com.sun.pisces.JavaSurface.initialize(JavaSurface.java)
at com.sun.pisces.JavaSurface.<init>(JavaSurface.java:45)
at com.sun.prism.sw.SWRTTexture.<init>(SWRTTexture.java:51)
at com.sun.prism.sw.SWResourceFactory.createRTTexture(SWResourceFactory.java:135)
at com.sun.prism.sw.SWResourceFactory.createRTTexture(SWResourceFactory.java:124)
at com.sun.javafx.tk.quantum.UploadingPainter.run(UploadingPainter.java:125)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:126)
at java.lang.Thread.run(Thread.java:829)
at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:552)
at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:192)
Update: Running the binary with -Dprism.verbose=true:
Aug 19, 2021 10:58:33 PM com.sun.javafx.application.PlatformImpl startup
WARNING: Unsupported JavaFX configuration: classes were loaded from 'unnamed module #11bd803'
Prism pipeline init order: es2 sw
Using Double Precision Marlin Rasterizer
Using dirty region optimizations
Not using texture mask for primitives
Not forcing power of 2 sizes for textures
Using hardware CLAMP_TO_ZERO mode
Opting in for HiDPI pixel scaling
Prism pipeline name = com.sun.prism.es2.ES2Pipeline
Loading ES2 native library ... prism_es2
succeeded.
GLFactory using com.sun.prism.es2.X11GLFactory
(X) Got class = class com.sun.prism.es2.ES2Pipeline
Failed Graphics Hardware Qualifier check.
System GPU doesn't meet the es2 pipe requirement
GraphicsPipeline.createPipeline: error initializing pipeline com.sun.prism.es2.ES2Pipeline
*** Fallback to Prism SW pipeline
Prism pipeline name = com.sun.prism.sw.SWPipeline
(X) Got class = class com.sun.prism.sw.SWPipeline
Initialized prism pipeline: com.sun.prism.sw.SWPipeline
vsync: true vpipe: false
java.lang.UnsatisfiedLinkError: com.sun.pisces.JavaSurface.initialize(III)V [symbol: Java_com_sun_pisces_JavaSurface_initialize or Java_com_sun_pisces_JavaSurface_initialize__III]
at com.oracle.svm.jni.access.JNINativeLinkage.getOrFindEntryPoint(JNINativeLinkage.java:153)
at com.oracle.svm.jni.JNIGeneratedMethodSupport.nativeCallAddress(JNIGeneratedMethodSupport.java:57)
at com.sun.pisces.JavaSurface.initialize(JavaSurface.java)
at com.sun.pisces.JavaSurface.<init>(JavaSurface.java:45)
at com.sun.prism.sw.SWRTTexture.<init>(SWRTTexture.java:51)
at com.sun.prism.sw.SWResourceFactory.createRTTexture(SWResourceFactory.java:135)
at com.sun.prism.sw.SWResourceFactory.createRTTexture(SWResourceFactory.java:124)
at com.sun.javafx.tk.quantum.UploadingPainter.run(UploadingPainter.java:125)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:126)
at java.lang.Thread.run(Thread.java:829)
at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:567)
at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:192)
I added <enableSWRendering>true</enableSWRendering> to the pom.xml and added com.sun.pisces.JavaSurface.initialize to reflect-config.json and jni-config.json (after running gluonfx:runagent).

Related

Could not load file or assembly 'CefSharp.Core.Runtime.DLL' or one of its dependencies. The specified module could not be found

We have installed CerfSharp using the NuGet Pakage Manager and created a class library which loads a ChromiumWebBrowser, it works fine on VisualStudio-2019,
When we deployed the class library(DLL) into target location along with required cefsharp supported files as mentioned the readme.txt, which throws following exception
Error Message: Could not load file or assembly 'CefSharp.Core.Runtime.DLL' or one of its dependencies. The specified module could not be found.
Stack Trace: at CefSharp.Cef.get_IsInitialized()
could anyone help us on this issue?
Added following cefsharp supported files in the target deployment location:
CEF core library.
libcef.dll
Crash reporting library.
chrome_elf.dll
Unicode support data.
icudtl.dat
V8 snapshot data.
snapshot_blob.bin
v8_context_snapshot.bin
[System Info]:
CefSharp Version=91.1.230.0
OS: Windows 7 x64
Visual Studio Version:
Microsoft Visual Studio Enterprise 2019
Version 16.7.8
.NET Framework: 4.8
Thanks,

How do I fix the controlsfx demo program to initialize class org.controlsfx.glyphfont.FontAwesome?

The controlsfx JavaFX library has a demo program and some controls fail to run, such as List Selection View, or List Action View or BreadCrumbBar.
I re-tested this on a new Windows 10 PC, with JDK11 and Gradle 5.5 freshly installed. I downloaded the branch 9 .zip, verified that the module-info.java files are present, and entered
gradlew run
For the above mentioned examples, the console shows:
Exception in thread "JavaFX Application Thread" java.lang.NoClassDefFoundError: Could not initialize class org.controlsfx.glyphfont.FontAwesome
at org.controlsfx.samples/org.controlsfx.samples.HelloListActionView.createActions(HelloListActionView.java:144)
at org.controlsfx.samples/org.controlsfx.samples.HelloListActionView.getPanel(HelloListActionView.java:63)
at org.controlsfx.fxsampler/fxsampler.SampleBase.buildSample(SampleBase.java:77)
at org.controlsfx.fxsampler/fxsampler.FXSampler.buildSampleTabContent(FXSampler.java:397)
at org.controlsfx.fxsampler/fxsampler.FXSampler.updateTab(FXSampler.java:305)
at org.controlsfx.fxsampler/fxsampler.FXSampler.changeSample(FXSampler.java:296)
at org.controlsfx.fxsampler/fxsampler.FXSampler.lambda$start$1(FXSampler.java:159)
JAVA_HOME is C:\Program Files\Java\jdk-11.0.3
gradle --version
------------------------------------------------------------
Gradle 5.5
------------------------------------------------------------
Build time: 2019-06-28 17:36:05 UTC
Revision: 83820928f3ada1a3a1dbd9a6c0d47eb3f199378f
Kotlin: 1.3.31
Groovy: 2.5.4
Ant: Apache Ant(TM) version 1.9.14 compiled on March 12 2019
JVM: 11.0.3 (Oracle Corporation 11.0.3+12-LTS)
OS: Windows 10 10.0 amd64
I'd like to take advantage of FontAwesome as well as the above mentioned controls.
I experimented with
JDK 11, 11.0.1, 11.0.2, 11.0.2
Gradle 5.2, 5.5
Command line
IntelliJ
Another PC I usually develop on
ControlsFX has a large number of external dependencies which are handled in the build.gradle file.
If your project does not use gradle to build the library, but instead it imports a .jar of it, then you should add all those options to the VM. To do that in IntelliJ, go to Edit Configuration, there you can find a VM options field.
You can try to copy and paste these options:
--add-exports=javafx.graphics/com.sun.javafx.scene=org.controlsfx.controls --add-exports=javafx.graphics/com.sun.javafx.scene.traversal=org.controlsfx.controls --add-exports=javafx.graphics/com.sun.javafx.css=org.controlsfx.controls --add-exports=javafx.controls/com.sun.javafx.scene.control.behavior=org.controlsfx.controls --add-exports=javafx.controls/com.sun.javafx.scene.control=org.controlsfx.controls --add-exports=javafx.controls/com.sun.javafx.scene.control.inputmap=org.controlsfx.controls --add-exports=javafx.base/com.sun.javafx.event=org.controlsfx.controls --add-exports=javafx.base/com.sun.javafx.collections=org.controlsfx.controls --add-exports=javafx.base/com.sun.javafx.runtime=org.controlsfx.controls --add-exports=javafx.web/com.sun.webkit=org.controlsfx.controls --add-exports=javafx.graphics/com.sun.javafx.css=org.controlsfx.controls
This worked for me. I was facing the same issue with ControlsFX 11.0, while using ListSelectionView.

Could not load assembly Microsoft.Threading.Tasks.dll

I am receiving the following error on iOS and Android project. Anybody has any workaround for this issue? This post recommends a workaround but the steps are vague.
C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2,2): Error: Exception while loading assemblies: System.IO.FileNotFoundException: Could not load assembly 'Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Perhaps it doesn't exist in the Mono for Android profile?
File name: 'Microsoft.Threading.Tasks.dll'
at Xamarin.Android.Tuner.DirectoryAssemblyResolver.Resolve(AssemblyNameReference reference, ReaderParameters parameters)
at Xamarin.Android.Tasks.ResolveAssemblies.AddAssemblyReferences(ICollection1 assemblies, AssemblyDefinition assembly, Boolean topLevel)
at Xamarin.Android.Tasks.ResolveAssemblies.AddAssemblyReferences(ICollection1 assemblies, AssemblyDefinition assembly, Boolean topLevel)
at Xamarin.Android.Tasks.ResolveAssemblies.Execute() (Braemar.Vers.Mobile.Droid)
I think that these two paths should have this file but I couldn't find it.
C:\Program Files (x86)\Reference
Assemblies\Microsoft\Framework\MonoAndroid\v1.0
C:\Program Files (x86)\Reference
Assemblies\Microsoft\Framework\MonoTouch\v1.0
Xamarin Studio:
Version 5.10.2 (build 56)
Installation UUID: 88f72eda-5030-43e9-8d1b-7658e8a17627
Runtime:
Microsoft .NET 4.0.30319.42000
GTK+ 2.24.23 (MS-Windows theme)
GTK# 2.12.30
Xamarin.Android:
Version: 6.0.1.10 (Business Edition)
Android SDK: C:\Android\android-sdk
Supported Android versions:
2.3 (API level 10)
4.0.3 (API level 15)
4.1 (API level 16)
4.2 (API level 17)
4.3 (API level 18)
4.4 (API level 19)
4.4.87 (API level 20)
5.0 (API level 21)
5.1 (API level 22)
6.0 (API level 23)
SDK Tools Version: 24.4.1
SDK Platform Tools Version: 23.1.0 rc1
SDK Build Tools Version: 23.0.2
Java SDK: C:\Program Files (x86)\Java\jdk1.7.0_71
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) Client VM (build 24.71-b01, mixed mode, sharing)
Build Information:
Release ID: 510020056
Git revision: bb74ff467c62ded42b7b7ac7fdd2edc60f8647b0
Build date: 2016-01-26 15:49:39-05
Xamarin addins: 8b797d7ba24d5abab226c2cf9fda77f666263f1b
Build lane: monodevelop-windows-cycle6-c6sr1
Operating System:
Windows 10.0.10586.0 (64-bit)
Project Information:
PCL 4.5 - Profile 7
I had such problem. It was caused by missing nuget packages in Droid project. Some of my subprojects referenced packages which had "Microsoft.Threading.Tasks" in references (PCLStorage, Restsharp portable). But in main Droid project I did not added this packages. After adding missing packages (PCLStorage, Restsharp portable) to Droid everything started work.
Is there any reason you are using Profile7?
I would recommend you create a project with profile 259, that is the default one for Xamarin Forms projects.
Otherwise you need to get a reference to that DLL. Normally I try installing the BCL NuGet package as my first port of call, but it might not be included in there: https://www.nuget.org/packages/Microsoft.Bcl/
Update
If you are having linker issues, you can skip certain assemblies: https://developer.xamarin.com/guides/ios/advanced_topics/linker/#Skipping_Assemblies
Sometimes the linker is more aggressive than anticipated.
I had the same problem.
Right click and select Options for the Android project.
Go to Build->General and uncheck "Use MSBuild build engine (recommended for this project type)"
Now I could build again!

ProGuard says Unsupported class version number [52.0] (maximum 51.0, Java 1.7) with sbt-proguard

I'm on Mac OS X 10.9.2 and sbt 0.13.3-SNAPSHOT (built from the sources), Java 8 and sbt-proguard 0.2.2 plugin.
sbt 0.13.3-SNAPSHOT
[jacek]> sbtVersion
[info] 0.13.3-SNAPSHOT
Java 8
$ /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/bin/java -version
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
project/plugins.sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-proguard" % "0.2.2")
When I ran proguard:proguard in sbt shell it blew up with the following exception:
[sbt-updates]> show proguard:proguard
[info] ProGuard, version 4.9
[info] Reading program directory [/Users/jacek/oss/sbt-updates/target/scala-2.10/sbt-0.13/classes] (filtered)
[info] Reading program jar [/Users/jacek/.ivy2/cache/org.scalaz/scalaz-concurrent_2.10/bundles/scalaz-concurrent_2.10-7.1.0-M6.jar] (filtered)
[info] Reading program jar [/Users/jacek/.sbt/boot/scala-2.10.3/lib/scala-library.jar] (filtered)
[info] Reading program jar [/Users/jacek/.ivy2/cache/org.scalaz/scalaz-core_2.10/bundles/scalaz-core_2.10-7.1.0-M6.jar] (filtered)
[info] Reading program jar [/Users/jacek/.ivy2/cache/org.scalaz/scalaz-effect_2.10/bundles/scalaz-effect_2.10-7.1.0-M6.jar] (filtered)
[info] Reading library jar [/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/rt.jar]
[error] Error: Can't read [/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/rt.jar] (Can't process class [apple/applescript/AppleScriptEngine.class] (Unsupported class version number [52.0] (maximum 51.0, Java 1.7)))
[trace] Stack trace suppressed: run last proguard:proguard for the full output.
[error] (proguard:proguard) Proguard failed with exit code [1]
[error] Total time: 16 s, completed Apr 19, 2014 2:27:56 PM
Why could be the reason for the error?
It appears that ProGuard and hence sbt-proguard don't support Java 8 yet and changing the version of Java used in the script to launch sbt helped.
[sbt-updates]> show proguard:proguard
[info] Compiling 8 Scala sources to /Users/jacek/oss/sbt-updates/target/scala-2.10/sbt-0.13/classes...
[warn] there were 6 feature warning(s); re-run with -feature for details
[warn] one warning found
[info] ProGuard, version 4.9
[info] Reading program directory [/Users/jacek/oss/sbt-updates/target/scala-2.10/sbt-0.13/classes] (filtered)
[info] Reading program jar [/Users/jacek/.ivy2/cache/org.scalaz/scalaz-concurrent_2.10/bundles/scalaz-concurrent_2.10-7.1.0-M6.jar] (filtered)
...
This is with the following version of Java 7:
$ /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/bin/java -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
The question is really interesting and i was facing the same problem with the only difference that i added Proguard programmatically by using maven. Consequently, i considered that it will be helpful to post my solution although it is a bit different from the main question. For all those that using maven and faces the same problem, my workaround fix was to update the version of Proguard by using it as runtime inside the plugin, so the working pom.xml looks like this
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.0.14</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<obfuscate>true</obfuscate>
<attach>true</attach>
<appendClassifier>false</appendClassifier>
<addMavenDescriptor>true</addMavenDescriptor>
<injar>${project.build.finalName}-jar-with-dependencies.jar</injar>
<injarNotExistsSkip>true</injarNotExistsSkip>
<libs>
<lib>${java.home}/lib/rt.jar</lib>
<lib>${java.home}/lib/jce.jar</lib>
<lib>${java.home}/lib/ext/sunjce_provider.jar</lib>
</libs>
<options>
<option>-allowaccessmodification</option>
<option>-optimizationpasses 3</option>
<option>-overloadaggressively</option>
<option>-repackageclasses ''</option>
<option>-dontusemixedcaseclassnames</option>
<option>-dontskipnonpubliclibraryclasses</option>
<option>-flattenpackagehierarch</option>
<option>-dontwarn</option> <!-- added option to ignore com.sun missing classes -->
<option>-keep public class com.StocksNews.App {
public static void main(java.lang.String[]);
}
</option>
</options>
</configuration>
<dependencies>
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard-base</artifactId>
<version>6.1.1</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
It's possible to update the version of Proguard that sbt-proguard uses by changing the key proguardVersion in build.sbt to a setting newer than 5.0, e.g.
ProguardKeys.proguardVersion in Proguard := "5.2.1"
See: https://github.com/sbt/sbt-proguard/issues/5
I fixed that by update to latest version of ProGuad from link below
Sourceforge ProGuard page
Add classpath "com.guardsquare:proguard-gradle:7.0.1" in the project level build.gradle to resolve the error. I have solved this issue by adding the same.
I will recommend you to upgrade the Gradle Version to 7.x.x, which will remove ProGuard and you have to migrate to R8, as R8 is backward compatible with your exisiting code ProGuard rules. For Migration please read docs other you will waste alot time in figuring out some feature is not working after migration same happened to me.

Maven build(with Flexmojos) for multi module project throwing an error

I am trying to setup a Flex/Java multi module project in Eclipse. Using Maven to run the build and generate the war file. The details of the versions I am using are as follows:
Flexmojos : 3.5.0
Flex framework/compiler : 4.5.1.21328
Target player : 10.2.0
And the playerglobal dependency in my pom file uses classifier as 10.2 with version 4.5.1.21328
Now when I run the build using 'mvn install', I get the following error:
[ERROR] Failed to execute goal
org.sonatype.flexmojos:flexmojos-maven-plugin:3.5.0:compile-swf
(default-compile-swf) on project client: TargetPlayer and
playerglobal dependency version doesn't match! Target player: 10.2.0,
player global: 10.2 -> [Help 1]
Any ideas why this might be happening?
I tried just playing around changing those version numbers, but still couldn't make it work for Flex 4.5.1. Please let me know how to go about this (and if you need more information). Thanks.
Regards
Basith
Have you tried simply referencing "10.2" instead of "10.2.0"? I think there was only one Flash player deployed with a 3-segment version number.

Resources