JavaFX Native libraries - swing

I create a simple Java Map Scene in JavaFX. I put jfxrt.jar into my lib folder in project, but I also need native libraries to use some components: for example glass.dll on Windows and libglass.dylib on MacOsX. I have got few queston:
Where I should add these libliaries? To /rt/?
It is Swing application, and client start it by using Java WebStart. How can I add dependencies to these native libs?
What about x32 / x64 Windows versions? The jfxrt.jar is different for 32bit and 64bit system.

Where I should add these libliaries? To /rt/?
You could place the libraries in ../bin relative to where you have placed jfxrt.jar. Haven't tried it, but I think it will work as that is the directory structure used by the JavaFX distributions.
Embedding the native libs in a Swing app delivered via a webstart package is not a documented deployment option. Instead of doing that, I'd advise checking for JavaFX presence in your Swing app and, if JavaFX is not there launching a browser pointing to the JavaFX runtime download and installation page - the instructions for which are here. For example:
try {
new javafx.util.Pair("a","b"));
} catch (ClassNotFoundException e) {
java.awt.Desktop.getDesktop().browse(new URI("http://www.java.com/en/javafx/"));
}
It is Swing application, and client start it by using Java WebStart. How can I add dependencies to these native libs?
If you app is still in development, and can be targeted for the JavaFX 2.2 release in a couple of months, then you could set the minimum version required for the app to JDK7u6 - which will include JavaFX 2.2 runtime libs - then you wouldn't have to worry about their distribution and the deployment scenarios are much, much simpler.
Not sure if JavaFX 2.1 embedded in Swing deployed via WebStart is supported (or would even work) outside of Windows. You may want to wait for 2.2 for Mac and Linux webstart support for JavaFX applications.
What about x32 / x64 Windows versions? The jfxrt.jar is different for 32bit and 64bit system.
If you app is launched from a browser, then whatever bits the browser has is the bits that are required for JavaFX and Java. Most browsers today (at least under windows) are 32 bits, even if the user has a 64bit OS - so that is something to watch out for. As you are using WebStart, it may not have the browser bit match dependence (in which case you should at least match the bit versions of JavaFX and Java).

Related

WP8 - Re-using a native DLL through Windows Runtime Component

I have a native dll that I'd like to use in a WP8 project that I'm working on. I've done some research and have created a C++ Windows Runtime Component (WRC) to wrap the native DLL. The WRC project uses a .lib file, and my WP8 application calls the WRC project.
My solution compiles all fine, but when my application makes a call to a method in the native DLL, I get a The specified module could not be found. (Exception from HRESULT: 0x8007007E) exception.
From reading around it seems like the dll is not being loaded. I've copied all relevant dlls to the output dir of where the .exe file is and also in various places but the error keeps showing up.
If anyone could point me in the right direction I'd be very grateful. Also if more info is required I'll post that up also.
The DLL must be included in your XAP package. Something you can see being taken care of in the Output window when you build your app, it starts with the "Begin Xap packaging" messages and then lists all the files that get added. The runtime error says it is not being included.
There is remarkably little guidance on how to ensure that a file gets included in a phone package when MSBuild cannot figure out the dependencies by itself. It certainly won't for your DLL, no way the build system can tell if it isn't a project in your solution. Seems you're operating a bit on the bleeding edge in this case :)
But this works well when I try it, going by the MSBuild output and not by actually testing it: Project + Add Existing Item. Navigate to your DLL and select it. Select it in the Solution Explorer window and look in the Properties window. Ensure that "Build Action" = Content, Copy to Output Directory = "Copy if newer". Rebuild, you'll now see the file getting added to the XAP. Which should solve this particular error. There might be others :)
Windows Desktop or Windows Store native DLLs are not binary compatible with Windows Phone, even if they are built for the same CPU architecture.
Therefore you will need to recompile your native DLL for the Windows Phone toolset.
About Windows Runtime Components:
On Windows Phone a Windows Runtime Component is itself a native DLL (.NET is not supported on the phone). The binaries of Windows Runtime Components cannot be shared between Windows Store apps and Windows Phone apps.

How to bundle jre with .exe file created from .jar

I created .exe file from .jar file .Now my client demands to run the application without installing jre in the sytem.I have heard that with bundled jre it is possible ...but i dont know how to bundle jre with .exe file..
The JavaFX is working on this. Here are the up-coming features in Java SE 7 u10:
https://blogs.oracle.com/talkingjavadeployment/entry/packaging_improvements_in_jdk_7#3
https://blogs.oracle.com/talkingjavadeployment/entry/packaging_improvements_in_jdk_7
I have used VMware ThinApp to do exactly what you are trying to do. It does cost money, but works extremely well. It allows you to roll up all the dependencies your application uses into a single executable that can then run on vanilla installations of Windows. It can be used for a lot more than just Java, and it does so by recording the changes you make to a system after installing your application + the JRE for example, and then wraps up all of those changes. It certainly simplifies application deployment, since the applications are now portable. I've even used it to roll up Visual C++ redistributables, and .NET as well. This certainly increases the size of the executable, but it's also convenient knowing the application will run successfully. See more info at http://www.vmware.com/products/thinapp/overview.html.
The open source Launch4j allows you to produce an exe with an embedded JRE. This SO article also discusses this topic. Caveat: I've had very good success with Launch4j, but never used the embedded JRE feature.

AIR file too big, breaks during installation

A client is having me convert an HTML5 video web application that I've already built into an AIR app.
The end users are going to need this to work with no internet access, so I MUST include a LOT of video files with the installer. This works fine on my machine, but my client can't install it because the .air file is too large and they don't have enough RAM. We'll need this installed on a number of laptops that aren't super powerful.
My SDK is up to date and we're using AIR 3.1.
Has anyone else run into a similar situation? Is there any workaround? For instance could I either include both the installer and the .air in a zipped folder, then have the installer move the video files to the appropriate location, or use AS to have the installer download the files (they will have internet access when installing).
I'd recommend you not to include heavy video files into your application. Downloading assets from web is a descent idea, I use same technique for several museum touchscreen apps.
So here's workflow: on startup app tries to connect to "assets server" and request list of files to download. It can be list of all the files, or list of files that have been updated/added since timestamp that you pass with your request. Then you download them to File.applicationStorageDirectory. Not to have mess in that directory I put all of them to "cache" subdirectory.
In case there's no internet connection for some reason when you install that app, you can have all that "cache" folder on your memory-stick/externalHD so you can manually perform that downloading process.
If you use Greensock's LoaderMax: I've written a simple URLStreamLoader that extends LoaderItem, handy for downloading files. Can share that.
The problem is quite obvious: the Adobe AIR provided installer for deploying your application is lacking.
However, Adobe recently released a new feature for deploying Adobe AIR apps: "runtime captive bundle" (Windows or OSX).
Which means 2 important things:
You receive an .exe which no longer requires an user to have Adobe AIR runtime installed (and no more incompatibilities when targeting multiple Adobe AIR runtimes).
You are no longer provided with an installer, and you have to find your own (which solves your problem halfway).
Target bundle when "compiling", and then just use a better installer (Windows or OSX) - think you are just deploying a normal application (worked for me:) ). There are too many installers arround to mention.
Your installer of choice + bundle compiling, together solve your offline installation requirement and the memory exhausting issue.
Packaging a captive runtime bundle for desktop computers

JavaFx 2 applicaton does not run when i run it through HTML page

I have downloaded the javafx 2 samples and want to run in from its HMTL. For example there is one javafx application called BrickBreaker. For the specific sample the following files exist : BrickBreaker.jar, BrickBreaker.jnlp and BrickBreaker.html
When double clicking on jar or jnlp the application runs as expected but when i click on the html the application does not run. Instead i get the message "View the conectes of the page. Please install javaFX"
Why is that happening ? ( i have the javafx installed as the application runs when choosing the jar and jnlp files). My guess is that the html should be called from within the context of a webserver meaning that i should deploy my application first to a server and call the url from my explorer. For example if using glassfish i should call the url http://localhost:8080/Brickbraker
The problem is that i don't know how to deploy the javafx application in the server.
i tried to copy paste all the above three files in the autodeploy folder but it didnt worked...
Could you please help me?
Thanks in advance
EDIT: some more info - I have installed JDK 7 and JavaFX SDK 2.0.2
No, JavaFX is client technology, you don't need Glassfish to run it. JavaFX should run in browser the same way as Java plugins do.
If you can't run an application directly from html file it means your browser doesn't recognize you have runtime installed.
There can be next reasons for that:
JavaFX runtime is actually not installed (check in Windows Control Panel)
pure java plugin is not installed (you can check on java.com)
javafx runtime is 32bit and you are using 64bit browser (or vice versa)
you are using not supported browser (e.g. Safari)
you are using not supported system (at this moment, January 2012, only Windows supports runtime)

How to publish an app with Air 3.0?

I have overlaid Air 3.0 over the flex sdk. I have targeted swf version 13 and included 3.0 in the header of my xml file, is there anything else i need to do to get my app published with air 3.0.
Also is there a way to check what version of air the app has been published with once it has been published?
I am using flash builder 4.5 and osx.
You can get the AIR version at runtime using NativeApplication.nativeApplication.runtimeVersion
Edit:
Also remember that there are different SDKs for Windows and for OSX. The Windows SDK does not work on OSX and vice-versa. Attempting to do so results in a runtime error.
OS X doesn't really matter.
Your application descriptor has changed in format since AIR2.0 The easiest way to check this is create a new AIR 3 project and check the app descriptor xml for that application, and compare it to yours. You will easily find out the differences.
The AIR runtime version (as lukevanin said) can be read from
NativeApplication.nativeApplication.runtimeVersion
Then you can publish in the same way as before (export release build -> select certificates, etc)