Auto updating launcher for JavaFX Applications

Related tags

GUI fxlauncher
Overview

FXLauncher

Maven Central Apache License

Auto updating launcher for JavaFX Applications. Combined with JavaFX native packaging, you get a native installer with automatic app updates.

You can see the launcher in action in this Demo Application.

QuickStart projects

Changelog

Check out the changelog for a list of all updates to the project.

Video demonstration

See the launcher in action in this short screencast. There is also a video about customizing the update user interface.

How does it work?

FXLauncher is a 18Kb jar that can be used to boot your application. It knows the location of your application repository where you host all the app resources.

See a manifest example here. FXLauncher will look up the remote repository to check for a newer version of the manifest on each startup.

After the manifest is retrieved, FXLauncher synchronizes every file mentioned in the manifest while providing the user with a progress indicator. After all resources are in sync, a classloader is initialized with all the resources from the manifest.

Lastly, the application entry point retrieved from the manifest is invoked. Everything happens in-JVM, no restarts needed.

Before each run, the launcher will synchronize all resources and seamlessly launch an always updated application.

How to use FXLauncher

See the QuickStart projects at the top of the README for information on integrating FXLauncher in your build system.

Adhoc usage

FXLauncher can also be used to launch an application at an arbitrary url by specifying the --app parameter at startup:

java -jar fxlauncher.jar --app=http://remote/location/app.xml

Alternatively (or in combination with --app...), you can override the uri attribute in the manifest (app.xml) so that both app.xml and all resources are loaded from the specified uri. This is especially useful for testing the complete setup locally or from a staging environment.

java -jar fxlauncher.jar --uri=http://remote/location/

The two parameters also work in tandem, allowing you to load a specified manifest from one URL and override its uri.

java -jar fxlauncher.jar --app=http://remote/location/app.xml --uri=http://remote/location/

Note: All parameters (including these) are passed on to your application. So please ensure that your parameters have a different name if they carry different data.

Include other artifacts

--include-extensions accepts a comma separated list of filename extensions to include of other resources from the build dir. By default it always includes jar, war.

Class-Loader issues

To load the application FXLauncher creates a new classloader fed with the classes of your manifest. This works as long as none of the classes uses the system classloader to load one of your classes or resources which is not aware of the application classes then.

One example is Java's java.net.URL class which uses Class.forName to load a custom handler, which uses the classloader of the callee which is the system classloader then.

To workaround that problem you could setup a special FXLauncher classloader which allows a different strategy how to feed the classpath with additional classpath entries.

java -Djava.system.class.loader=fxlauncher.FxlauncherClassCloader -jar fxlauncher.jar --app=http://remote/location/app.xml

Headless

FXLauncher allows you to run in headless mode and thus be used not only for JavaFX applications, but also for e.g. services which run without any gui at all.

For this to work you could use fxlauncher.HeadlessMainLauncher

java -classpath fxlauncher.jar fxlauncher.HeadlessMainLauncher --app=http://remote/location/app.xml

Notice: WhatsNew is not supported.

File based deployment

The app uri can be a file:// based url instead of a web uri if your application is hosted on a common network location for your users.

UNC Paths

FXLauncher can deal with UNC paths, if you ask it nicely. Instead of \\server\share\myapp use file:////server/share/myapp. Yes, that's four forward slashes; two for the file:// protocol and two for the UNC path.

Native installers

The native installer does not contain any application code, only the launcher. There is no need to rebuild your native installer when you update your project, simply run the deploy-app goal and all users will run the newest version on their next startup. Point users to the fxlauncher.jar or to a native installer if you wish.

Try a native installer

Check out these prebuilt installers for a more complex demo application

Specify cache directory

By default, the artifacts are downloaded to the current working directory. This is usually fine for per-user native installers, but if you distribute your application via a system-wide native installer, or just the launcher jar, you might want to specify where the downloaded artifacts land. See the cache dir documentation for more information.

Installation location

It's worth noting that the two package alternatives for Windows, (EXE and MSI) have different default install locations. While EXE will default to %LocalAppData%, the MSI installer will default to %ProgramFiles%. To write to %ProgramFiles% one definitely does need admin privileges—that poses a problem for FXLauncher which, by default, downloads updates to where it was installed.

If you use the MSI installer you will therefore need to tell FXLauncher to cache artifacts somewhere it is allowed to put them. For an OS-independent answer to this problem, look no further than the two magical strings, USERLIB and ALLUSERS.

Read more about Java Packager in the official documentation:

https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html

Accept downgrades

FXLauncher will not download a remote version if the local version is newer. This is controlled by comparing a timestamp in the manifest. Specifying --accept-downgrades=true as the last argument to CreateManifest will allow you to make sure that the version you have published will always be used by your clients even if they have a newer version installed. This option is also available in the Gradle plugin as acceptDowngrades.

Ignore ssl errors.

If you are behind a proxy that does a man in the middle attack to snoop on ssl connections, you can use the --ignoressl commandline option to ignore the ssl errors this will generate.

Stop after update errors.

Normally FXlauncher will try to launch the application even if there were errors during the update of the files from the server. Often this will work using the files already in the local cache. You can change this behavior by specifying --stop-on-update-errors=true. The error will be shown and the launcher will exit. Specifying --stopOnUpdateErrors will result in the same behavior, but this variant is deprecated and will be removed in future versions. If both options are specified the value of --stop-on-update-errors will be used.

Show what's new dialog.

You can have FXLauncher show a whats new dialog. This dialog will only be shown when FXLauncher has to download new files from the server. The html will be shown in a WebView. Specify --whats-new=https://whatsnewurl/here

Applications with no default UI

By default the update screen will remain visible until the primary stage is shown. If your application does not show anything on the primary stage at startup, the update screen will stay visible until it does. You can pass in --lingering-update-screen=false to hide it immediately after the update process has completed.

A slimmer alternative

Instead of using javapackager to create an installer, you can embed the fxlauncher jar in a native installer system like Advanced Installer—same approach as above, but without using javapackager. With this approach, you can choose whether to include a JRE or have the installer software preinstall it. Again, you are only distributing the launcher with the native installer, the rest is pulled down on demand.

A note on classloaders

FXLauncher uses a custom classloader to dynamically load the synchronized resources. This classloader is then made available to the FXMLLoader. You can access it via FXMLLoader.getDefaultClassLoader().

Platform specific resources

FXLauncher supports filtering of resources for the running platform. Any resource that ends with -[mac|win|linux].jar will only be downloaded and put on the classpath on the corresponding platform. The manifest enforces this though the os attribute in app.xml.

Native libraries

If you need to load native libraries before the custom class loader kicks inn, specify the --preload-native-libraries= parameter to CreateManifest. It supports a comma separated list of libraries to load. Remember: No extensions, just the library name.

Custom UI

There are two ways to customize the appearance of the update UI. Either you can configure the supported style properties in the manifest, or you can provide a custom implementation of the UIProvider to completely customize the UI. Have a look at this Custom UI Demo Project for more information about customizing the updater.

Comments
  • [Idea] Reworking architecture of fxlauncher

    [Idea] Reworking architecture of fxlauncher

    As discussed in #15, reworking the architecture of fxlauncher would allow to bring new features to it such as:

    1. Enabling updates for the launcher itself
    2. Version control of the application and rollback function
    3. Downloading the appropriate JRE (if not present on the system)

    All of those changes would result in a small native executable (exe, app, etc.) that would download all needed dependencies on the first launch. The native stub wouldn't be bigger than 1 MB for sure, meaning that the launcher would function as a 'web installer'.

    opened by mainrs 53
  • fxlauncher.jar not found

    fxlauncher.jar not found

    Hi seems I am missing some thing - getting following error [INFO] --- exec-maven-plugin:1.4.0:exec (embed-manifest-in-launcher) @ Turn --- java.io.FileNotFoundException: fxlauncher.jar (The system cannot find the file specified) at java.io.FileInputStream.open0(Native Method) at java.io.FileInputStream.open(FileInputStream.java:195) at java.io.FileInputStream.(FileInputStream.java:138) at sun.tools.jar.Main.run(Main.java:261) at sun.tools.jar.Main.main(Main.java:1288) [INFO] ------------------------------------------------------------------------ help requested..

    opened by aabhaanjan 30
  • Windows Installation Fails with NPE

    Windows Installation Fails with NPE

    After building on Windows 10 and trying to perform the installation I see the following error just during or after the update concludes. Does this work with Windows?

    java.lang.NullPointerException at fxlauncher.Launcher.launchAppFromManifest(Launcher.java:164) at fxlauncher.Launcher.lambda$start$0(Launcher.java:153) at java.lang.Thread.run(Thread.java:745)

    opened by gcstang 27
  • Loading and Updating scene customization

    Loading and Updating scene customization

    Hello Edvin,

    I'm wondering if it's possible to customize the loading and updating scenes. This is the default loading scene:

    loading

    and this is the updating scene:

    updating

    I think right now is possible to do some customization to the "updating" scene via app.xml. Would be awesome if we can provide both custom scenes or something like that. Again, thanks.

    opened by pablovilas 23
  • Classloader issue when loading FXML files

    Classloader issue when loading FXML files

    Hello again :)

    So I've tried to load my .FXML files from the class path using CLASSNAME.class.getResoure("/RESOURCENSME.fxml") but it doesn't work and it gives me a javafx.fxml.LoadException when starting the launcher. I've tried to use FXMLLoader.getDefaultClassLoader().getResource("RESOURCENAME.fxml") (without the slash) but it still doesn't work and gives me javafx.fxml.LoadException: file:/JAR_FILE_LOCATION!/RESOURCENSME.fxml EDIT: The "!" mark is actually there and not written by me.

    Thanks

    opened by HossamMohsen7 22
  • Native launcher on OS X => jars downloaded into ${user.home}, not into bundle

    Native launcher on OS X => jars downloaded into ${user.home}, not into bundle

    I'm mac user and I'm testing you great FXLauncher. I see that FXLauncher downloads jar files into user.home variable and It would be great to set the target folder. In OS X it would be download into the .app folder in fact, because if you drop the icon app to trash, you don't uninstall all the app because all the jars it's outside. If you want to get the dir to save the jars on OS X the code is:

                final URL myURL = Client.class.getProtectionDomain().getCodeSource().getLocation();
        java.net.URI myURI = null;
        try {
            myURI = myURL.toURI();
                        final String dir = java.nio.file.Paths.get(myURI).toFile().toString();
        } catch (final URISyntaxException e){
        }
    

    Thank you and keep the great job

    opened by carlosmonterocanabal 17
  • Update dependencies

    Update dependencies

    Hi, next idea: it would be cool if the updater would automatically update the manifest file so if we update a dependency library or other files that they could be included via a regular update and the application must not be installed completely new.

    opened by boergegrunicke 16
  • When create installer for window facing issues **Error: Bundler

    When create installer for window facing issues **Error: Bundler "EXE Installer" (exe) failed to produce a bundle.**

    When i am trying to create native installer for windows it show error while running mvn install command in cmd.

    Error Output

    No base JDK. Package will use system JRE. The jar ant-launcher.jar has a main class org.apache.tools.ant.launch.Launcher that does not match the declared main fxlauncher.Launcher The jar ant.jar has a main class org.apache.tools.ant.Main that does not match the declared main fxlauncher.Launcher The jar fxsampler.jar has a main class fxsampler.FXSampler that does not match the declared main fxlauncher.Launcher The jar javassist.jar has a main class javassist.CtClass that does not match the declared main fxlauncher.Launcher No base JDK. Package will use system JRE. The jar ant-launcher.jar has a main class org.apache.tools.ant.launch.Launcher that does not match the declared main fxlauncher.Launcher The jar ant.jar has a main class org.apache.tools.ant.Main that does not match the declared main fxlauncher.Launcher The jar fxsampler.jar has a main class fxsampler.FXSampler that does not match the declared main fxlauncher.Launcher The jar javassist.jar has a main class javassist.CtClass that does not match the declared main fxlauncher.Launcher Creating app bundle: Calimatic_Automator in D:\Office_Work\Main\IntelliJ_Idea_Projects\CaliMatic_Automator\target\installer\bundles Result application bundle: D:\Office_Work\Main\IntelliJ_Idea_Projects\CaliMatic_Automator\target\installer\bundles The jar ant-launcher.jar has a main class org.apache.tools.ant.launch.Launcher that does not match the declared main fxlauncher.Launcher The jar ant.jar has a main class org.apache.tools.ant.Main that does not match the declared main fxlauncher.Launcher The jar fxsampler.jar has a main class fxsampler.FXSampler that does not match the declared main fxlauncher.Launcher The jar javassist.jar has a main class javassist.CtClass that does not match the declared main fxlauncher.Launcher java.io.IOException: Exec failed with code 2 command [[C:\Program Files (x86)\InnoSetup6\iscc.exe, /oD:\Office_Work\Main\IntelliJ_Idea_Projects\CaliMatic_Automator\target\installer\bun dles, C:\Users\DELL\AppData\Local\Temp\fxbundler5171463807998518908\images\win-exe.image\Calimatic_Automator.iss] in C:\Users\DELL\AppData\Local\Temp\fxbundler5171463807998518908\image s\win-exe.image at com.oracle.tools.packager.IOUtils.exec(IOUtils.java:165) at com.oracle.tools.packager.IOUtils.exec(IOUtils.java:138) at com.oracle.tools.packager.IOUtils.exec(IOUtils.java:132) at com.oracle.tools.packager.windows.WinExeBundler.buildEXE(WinExeBundler.java:697) at com.oracle.tools.packager.windows.WinExeBundler.bundle(WinExeBundler.java:366) at com.oracle.tools.packager.windows.WinExeBundler.execute(WinExeBundler.java:173) at com.sun.javafx.tools.packager.PackagerLib.generateNativeBundles(PackagerLib.java:352) at com.sun.javafx.tools.packager.PackagerLib.generateDeploymentPackages(PackagerLib.java:319) at com.sun.javafx.tools.packager.Main.main(Main.java:476) Error: Bundler "EXE Installer" (exe) failed to produce a bundle. [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 46.116 s [INFO] Finished at: 2019-11-22T18:19:03+05:00 [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.4.0:exec (installer) on project Calimatic_Automator: Command execution failed.: Process exited with an error: -1 (E xit value: -1) -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

    opened by HamzaShahidAli 14
  • SSL issues with generated native installers for Linux

    SSL issues with generated native installers for Linux

    If i build a native installer for Linux, i get SSL handshake exceptions for all network requests using https. Both for the Launcher and my own application.

    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found
            at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
            at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1946)
            at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:316)
            at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:310)
            at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1639)
            at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:223)
            at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1037)
            at sun.security.ssl.Handshaker.process_record(Handshaker.java:965)
            at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1064)
            at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
            at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
            at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
            at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
            at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
            at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1564)
            at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
            at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:263)
            at fxlauncher.FXManifest.load(FXManifest.java:198)
            at fxlauncher.AbstractLauncher.syncManifest(AbstractLauncher.java:223)
            at fxlauncher.AbstractLauncher.updateManifest(AbstractLauncher.java:92)
            at fxlauncher.Launcher.lambda$start$0(Launcher.java:140)
            at java.lang.Thread.run(Thread.java:748)
    Caused by: sun.security.validator.ValidatorException: No trusted certificate found
            at sun.security.validator.SimpleValidator.buildTrustedChain(SimpleValidator.java:397)
            at sun.security.validator.SimpleValidator.engineValidate(SimpleValidator.java:134)
            at sun.security.validator.Validator.validate(Validator.java:262)
            at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324)
            at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229)
            at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124)
            at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1621)
            ... 17 more
    

    When i execute the generated jar file everything works as expected. Also the native installers for MacOS and Windows work as expected.

    Java version is: jdk1.8.0_212 Linux Distro is: Kubuntu 19.04 with kernel 5.0.0-19-generic

    What am i doing wrong?

    opened by chippmann 14
  • Bug: Basic auth is not working for domain subdirectories?

    Bug: Basic auth is not working for domain subdirectories?

    Basic auth is not working properly for subdirectories, i.e. if the files are stored in: host.de/subdirectory

    Maven App URL configuration;

    <app.url>http://user:[email protected]/subdirectory</app.url>

    => With this configuration, an exception occurs: FileNotFoundException: http://user:[email protected]/someJar.jar

    It seems that the subdirectory is ignored.

    I´ve found out that there is a workaround by extending the maven <app.url> configuration

    <app.url>http://user:[email protected]/subdirectory/any_string_workaround</app.url>

    => Now the path host.de/subdirectory seems to be resolved correctly

    opened by humpfle 14
  • Update if client is newer than server-version -> Exception

    Update if client is newer than server-version -> Exception

    Hi, first i think this is a realy cool project because it is easy to use and seems extremly stable. Maybe this could also be a part of #16, but we found a problem, our customer wanted to have complete installation-bundles to test the application before our update-server was present, we also implemented some new features, and shipped them with the installer and not on the server, but if the new version now checks for an update and client version is newer than the version on the update server if does something wrong, throws errors and afterwards it is not possible to start the application online or offline. would be realy cool, also a possibility for downgrade and updates for the jre would be very good.

    regards

    børge

    opened by boergegrunicke 14
  • Deployed to the local disk, and there seems to be an error in the progress

    Deployed to the local disk, and there seems to be an error in the progress

    Hi, I like the fxlauncher project; But the following question, I am more confused, I hope to be answered; thank you!~

    Video

    https://www.youtube.com/watch?v=roQ19k8xi6Q

    Test upgrade progress bar passed

    image

    When actually running, the program is not updated, but the progress bar fills up instantly, and the value of progress is far greater than 1

    image

    I don't know if this problem is related to deploying to the local disk

    image

    I wrote a dynamic progress bar, which is normal in the custom-ui test, manually set the progress from 0 to 1.0, and you can see the complete loading animation; However, when the program is actually running, the progress bar of the program's upgrade will instantly be greater than 1, become a large number, and continue to grow; I deliberately packaged an 8G program as the Ver2.0 version, so that the progress bar is still filled in an instant, the value of the progress is also greater than 1 in an instant, and soon reaches 1652700.. and is still increasing; I don't know if this is related to the fact that I did not deploy the program to the server, but deployed the program to the local disk; After waiting, the program will still be successfully updated, that is, there is a problem with the value of progress;

    opened by leewyatt 0
  • Exception in thread

    Exception in thread "FXLauncher-Thread" java.lang.IllegalAccessError: class fxlauncher.Launcher$1 (in module fxlauncher) cannot access class com.sun.javafx.application.PlatformImpl (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.application to module fxlauncher

    Hi,

    I have been banging my head trying to figure this problem out. The error message is self-explanatory. It seems fxlauncher is attempting to access a non exported class.

    What is a way to solve this problem?

    Command being ran:

    java -Djava.system.class.loader=fxlauncher.FxlauncherClassCloader 
       --add-modules java.xml.bind,javafx.base,javafx.fxml,javafx.controls,javafx.graphics,javafx.web 
       -Dfile.encoding=UTF-8 
       -classpath 
              code/src/javafx-agent/target/classes:
              .m2/repository/com/microsoft/sqlserver/mssql-jdbc/10.2.0.jre17/mssql-jdbc-10.2.0.jre17.jar:
              .m2/repository/org/slf4j/jcl-over-slf4j/2.0.0-alpha7/jcl-over-slf4j-2.0.0-alpha7.jar:
              .m2/repository/org/slf4j/slf4j-api/2.0.0-alpha7/slf4j-api-2.0.0-alpha7.jar:
              .m2/repository/org/glassfish/jaxb/jaxb-runtime/2.3.1/jaxb-runtime-2.3.1.jar:
              .m2/repository/org/glassfish/jaxb/txw2/2.3.1/txw2-2.3.1.jar:
              .m2/repository/com/sun/istack/istack-commons-runtime/3.0.7/istack-commons-runtime-3.0.7.jar:
              .m2/repository/org/jvnet/staxex/stax-ex/1.8/stax-ex-1.8.jar:
              .m2/repository/com/sun/xml/fastinfoset/FastInfoset/1.2.15/FastInfoset-1.2.15.jar:
              .m2/repository/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0.jar:
              .m2/repository/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1.jar 
    -p 
             javafx-agent/target/app 
    -m 
             fxlauncher/fxlauncher.Launcher --app=javafx-agent/target/app/app.xml```
    
    

    Here is the stacktrace I am getting:

    OpenJDK 64-Bit Server VM warning: Archived non-system classes are disabled because the java.system.class.loader property is specified (value = "fxlauncher.FxlauncherClassCloader"). To use archived non-system classes, this property must not be set
    logging to /var/folders/8q/ln9l7ksj3fn8419bb09l3gxm0000gn/T//fxlauncher.log
    Apr. 14, 2022 4:04:07 P.M. fxlauncher.AbstractLauncher syncManifest
    INFO: Loading manifest from 'app' parameter supplied: javafx-agent/target/app/app.xml/
    Apr. 14, 2022 4:04:08 P.M. fxlauncher.AbstractLauncher syncFiles
    INFO: Using cache dir .
    Apr. 14, 2022 4:04:08 P.M. fxlauncher.AbstractLauncher createApplicationEnvironment
    INFO: Loading appClass ai.dentacloud.dentacloudagent.DentacloudApplication
    Exception in thread "FXLauncher-Thread" java.lang.IllegalAccessError: class fxlauncher.Launcher$1 (in module fxlauncher) cannot access class com.sun.javafx.application.PlatformImpl (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.application to module fxlauncher
    	at fxlauncher/fxlauncher.Launcher$1.createApplication(Launcher.java:51)
    	at fxlauncher/fxlauncher.AbstractLauncher.createApplicationEnvironment(AbstractLauncher.java:176)
    	at fxlauncher/fxlauncher.Launcher.lambda$start$0(Launcher.java:158)
    	at java.base/java.lang.Thread.run(Thread.java:833)
    
    
    opened by edovale 1
  • Requires a function that explicitly informs when a required attribute is missing.

    Requires a function that explicitly informs when a required attribute is missing.

    If both launch and uri properties are missing, a NullPointerException error occurs like below.

    java.lang.NullPointerException at java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1011) at java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1535) at java.lang.ClassLoader.getClassLoadingLock(ClassLoader.java:457) at java.lang.ClassLoader.loadClass(ClassLoader.java:398) at java.lang.ClassLoader.loadClass(ClassLoader.java:351) at fxlauncher.AbstractLauncher.createApplicationEnvironment(AbstractLauncher.java:175) at fxlauncher.Launcher.lambda$start$0(Launcher.java:162) at java.lang.Thread.run(Thread.java:748)

    However, these exceptions make it difficult to find the cause.

    If there is a missing property necessary for the operation, such as uri or launch attributes, I hope it will be explicitly provided as an exception.

    That way, even if the required attributes are missing, I think we can quickly find the cause.

    opened by yebgi83 0
  • MSI Installer not working

    MSI Installer not working

    When running the mvn install command everything seem to work but MSI part i get this error

    Error: Bundler "MSI Installer" (msi) failed to produce a bundle.

    I have WiX 3.8 and i've added it to the Path

    opened by AIGLEZMA 0
  • Download from Github Releases or Actions artifacts

    Download from Github Releases or Actions artifacts

    Hey there, i'm positing a suggestion here to add support for Github Releases to automatically download the JAR from their without having to host the JAR elsewhere

    opened by AIGLEZMA 0
  • FXlauncher with ant project

    FXlauncher with ant project

    Hello, I want to use fxlauncher with ant to manage the auto-update of my javafx application once deployed on an online server, the problem is that when i deploy it on local server and launch the fxlauncher.jar it is unable to find the app i deploy with it.

    opened by FoulaFolly 1
Releases(v1.0.21)
  • v1.0.21(Dec 28, 2018)

  • v1.0.20(Jul 17, 2018)

  • v1.0.19(Mar 9, 2018)

  • v1.0.18(Feb 19, 2018)

  • v1.0.17(Aug 15, 2017)

    This release sports a single feature: Support for file:// based deployment

    It means that you can configure your app uri to be file:// based, which would use file system operations to sync instead of http. This is neat for applications deployed in company wide networks where you have access to a common file share instead of an http server.

    Source code(tar.gz)
    Source code(zip)
    fxlauncher-1.0.17.jar(36.29 KB)
  • v1.0.16(Mar 31, 2017)

  • v1.0.15(Mar 12, 2017)

    This is probably the most feature packed release ever! Many small improvements and some big new features like the headless mode and whats new screen. Enjoy!

    • --lingering-update-screen will keep the update screen active until the primary stage is shown. The default is false, whereas the old behavior was similar to setting it to true.
    • Alternative classloader strategy (https://github.com/edvin/fxlauncher/pull/55)
    • USERLIB Now resolves to user.home/AppData/Local on Windows (https://github.com/edvin/fxlauncher/issues/52)
    • --ignoressl commandline argument to the fxlauncher.jar will ignore ssl certificate errors. This is especially useful when running in a business environment with for example the blue coat proxy that uses a man in the middle attack to sniff on https connections.
    • whatsnew option is available, see README.md how to use it.
    • App URI can now be any kind of URI, for example file://
    • log statements get logged to TEMPDIR/fxlauncher.log. TEMPDIR is OS specific. The Error dialog will show you where it expects to find it. Logfile location can be overwritten with the --logfile=filename command line option.
    • --offline flag added. when used on the command line the files will not be checked or downloaded from the remote.
    • --stopOnUpdateErrors added. This will stop the fxlauncher from trying to start the application when there were errors updating the jars from the remote
    Source code(tar.gz)
    Source code(zip)
    fxlauncher-1.0.15.jar(35.54 KB)
  • v1.0.14(Oct 26, 2016)

  • v1.0.13(Sep 12, 2016)

    • Support for fully customizable update UI, see (https://github.com/edvin/fxlauncher-custom-ui)
    • Basic Authentication support for manifest url (via https://user:pass@host/path)
    • Added --include-extensions as a comma separated list of filename extensions to include of other resources from the build dir. By default it always includes jar,war.
    • Fixed bug: If updating from a manifest with no timestamp (pre 1.0.11), new version was considered older, so no upgrade was performed
    Source code(tar.gz)
    Source code(zip)
    fxlauncher-1.0.13.jar(24.77 KB)
  • v1.0.12(Aug 17, 2016)

  • v1.0.10(May 7, 2016)

    This release adds the ability to choose an alternative location for the downloaded artifacts. The default is still "current working directory" but this can be overriden by the manifest parameter cacheDir or the command line parameter --cache-dir.

    If the cache dir parameter starts with the magical string USERLIB/ this string will be replaced with an OS specific path. Consider the following parameter value:

    --cache-dir=USERLIB/MyApp
    

    The result will be:

    | OS | Location | | --- | --- | | Windows | ~/AppData/MyApp | | Mac | ~/Library/Application Support/MyApp | | Linux | ~/.MyApp |

    New features

    • Add optional --cache-dir program parameter cacheDir and manifest entry (https://github.com/edvin/fxlauncher/issues/9)
    • Add / if missing from base url (https://github.com/edvin/fxlauncher/issues/6)
    Source code(tar.gz)
    Source code(zip)
    fxlauncher-1.0.10.jar(20.66 KB)
  • v1.0.9(Mar 14, 2016)

  • v1.0.7(Feb 20, 2016)

    Added

    • Support for platform specific resources

    Changed

    • Parameters are now passed to the Application instance (https://github.com/edvin/fxlauncher/issues/1)
    Source code(tar.gz)
    Source code(zip)
Owner
Edvin Syse
Edvin Syse
DataFX - is a JavaFX frameworks that provides additional features to create MVC based applications in JavaFX by providing routing and a context for CDI.

What you’ve stumbled upon here is a project that intends to make retrieving, massaging, populating, viewing, and editing data in JavaFX UI controls ea

Guigarage 110 Dec 29, 2022
A mod launcher for FNF: Forward!

Contact: Colonel Kai#3957 FNF Forward Launcher A mod launcher for FNF: Forward! Credits: FNF Forward Organizer - Pip Head Developer - Co

Kurinku Studios 12 Apr 29, 2022
Mod Launcher by Jbro129 fixed to work with Root instead of VA

Fixed Jbro ModLauncher Mod Launcher by Jbro129 fixed to work with Root instead of VA Code Used: https://github.com/jbro129/PG3D-JbroLauncher https://g

A Random Person 15 Jul 23, 2022
Ini adalah Launcher SAMP untuk android, ini hanya untuk mengganti nama dan kemungkinan di update lanjutnya akan mendukung download client. Bersenang senanglah!!!

SAMP-Launcher-Android Ini adalah Launcher SAMP untuk android, ini hanya untuk mengganti nama dan kemungkinan di update lanjutnya akan mendukung downlo

Kiril 3 Nov 3, 2022
Create your own auto-update framework

Read the documentation, explore the JavaDoc, or see it in action Create a framework: design the environment and lifecycle (—bootstrap) to make your ow

null 698 Dec 29, 2022
To quickly integrate your applications into the EdgeGallery platform, we provide the toolchain project to help developers quickly modify code and migrate applications to the platform.

Toolchain 工具链 工具链是MEC Developer开发者平台中的一个重要特性,当x86平台的App想要上车ARM平台时,底层的代码不可避免的需要进行修改或重写。 App提供者可以通过MEC Developer开发者平台中集成的工具链进行源代码分析,定位需要修改的源代码并根据指导意见进行修

EdgeGallery 19 Jan 7, 2022
A 3D chart library for Java applications (JavaFX, Swing or server-side).

Orson Charts (C)opyright 2013-2020, by Object Refinery Limited. All rights reserved. Version 2.0, 15 March 2020. Overview Orson Charts is a 3D chart l

David Gilbert 96 Sep 27, 2022
A Javafx Library for building MVC Applications.

A JavaFx Library For Making MVC Type Desktop Applications Installation requires Java jdk > 7 for windows requres openjdk-7 or 8 and openjfx for linux

Obi Uchenna David 38 Apr 30, 2022
A lightweight RCP framework for JavaFX applications.

WorkbenchFX The one and only framework to build large JavaFX Applications! Maven To use this framework as part of your Maven build simply add the foll

DLSC Software & Consulting GmbH 471 Jan 8, 2023
A 2D chart library for Java applications (JavaFX, Swing or server-side).

JFreeChart Version 2.0.0, not yet released. Overview JFreeChart is a comprehensive free chart library for the Java(tm) platform that can be used on th

David Gilbert 946 Jan 5, 2023
Lib-Tile is a multi Maven project written in JavaFX and NetBeans IDE 8 and provides the functionalities to use and handle easily Tiles in your JavaFX application.

Lib-Tile Intention Lib-Tile is a multi Maven project written in JavaFX and NetBeans IDE and provides the functionalities to use and handle easily Tile

Peter Rogge 13 Apr 13, 2022
Icon packs for Java applications

Ikonli Ikonli provides icon packs that can be used in Java applications. Currently Swing and JavaFX UI toolkits are supported. Installing You can get

Kordamp 415 Dec 28, 2022
JSilhouette provides additional shapes for Java applications

JSilhouette JSilhouette provides additional shapes for Java applications. Currently JavaFX is supported. Installing You can get the latest version of

Kordamp 39 Nov 7, 2022
An open source application to make your own android applications without coding!

Stif An Open source project for building Android Application at a go both with and without coding. This project was inspired from Scratch and Sketchwa

Nethical org 5 Aug 28, 2021
An Android library that allows you to easily create applications with slide-in menus.

An Android library that allows you to easily create applications with slide-in menus. You may use it in your Android apps provided that you cite this project and include the license in your app. Thanks!

Jeremy Feinstein 11.1k Jan 4, 2023
Collection of Binding helpers for JavaFX(8)

Advanced-Bindings for JavaFX (8) advanced-bindings is a collection of useful helpers and custom binding implementations to simplify the development of

Manuel Mauky 63 Nov 19, 2022
Docking framework for JavaFX platform

Docking framework for JavaFX platform AnchorFX is a gratis and open source library for JavaFX to create graphical interfaces with docking features Anc

Alessio Vinerbi 197 Oct 15, 2022
A library of +70 ready-to-use animations for JavaFX

AnimateFX A library of ready-to-use animations for JavaFX Features: Custom animations Custom interpolators Play/Stop animation Play an animation after

Loïc Sculier 366 Jan 5, 2023
BootstrapFX: Bootstrap for JavaFX

BootstrapFX BootstrapFX is a partial port of Twitter Bootstrap for JavaFX. It mainly provides a CSS stylesheet that closely resembles the original whi

Kordamp 810 Dec 28, 2022