I have developed a program using Java SE on Windows 7.
I build this app and it runs well on Windows.
I tried to run on Linux, so it runs but after some steps of:
Removing OpenJDK app.
Install Java JDK from terminal
Run jar file from terminal.
I need to make an installer on Windows - Linux - Mac, which installs JDK package and make the program run by double clicking.
Try using JarSplice. It is a nifty tool for converting Jar files into runnables for different systems. There are lots of tutorials on the internet on how to use it, although it is very well labelled and I found it simple enough to use.
Related
I created a program using Java 8(JDK 8), but when I try to run it on a device that isn't mine (so no JDK), it makes me download a JRE.
1) why don't all programs when you download them make you do this? Is it just most programs aren't using Java?
2) how to I create an installation exe to install the JRE and the program. (As of now I'm just running my program as an exe).
Is it just most programs aren't using Java?
Yes, java is a popular programming language but most (desktop) applications are not written in java.
Some programs do also come with a JRE, meaning that it is installed with the program.
how to I create an installation exe to install the JRE and the program.
The exe could try to download the JRE from the API of e.g. OpenJDK, execute it and wait until it finishes, you could bring an installer with you, you could tell the user to install a JDK or you use an installer template that does one of the things for you.
I imagine some Java gurus with experience delivering Java apps on Windows desktops will be able to ace this one. I've always been a Mac/Linux Java developer so this is uncharted territory for me :-/.
I have to write a Java 8 Swing application and install it on a Windows 10 (64-bit) machine. My gameplan is to package the app as an executable JAR and wrap it with Launch4J, so that it looks like a native Windows EXE (.exe file). However its a little bit more complication than that when it comes to the distribution:
There will be the JAR/EXE as mentioned above, lets call it myapp.exe (built from myapp.jar)
The app will output logs to a (local?) directory, myapp.log
The app will load a config file at runtime, myapp.properties
The distribution should also contain the User's Guide, MyApp User Guide.html
Let's assume a Java 8 JRE/JDK is already installed on the machine, so we don't need to worry about installing Java itself.
The installation process must be simple and include:
Removing the old version (and all of its other artifacts such as the log file, config/properties file, user guide, etc) off the machine completely
Installing the new version at either the Windows 10 default location, or allowing the user to specify a different location
Additionally, if at all possible, I'd like the installation process to include:
A requirements check for things like minimum memory and disk space, OS version info/compatibility (i.e. make sure its being installed on Windows 10, etc.)
Provide an easy-to-use wizard such as an MSI that the user can click though
Optionally install shortcuts to the user's Desktop
Given all this, I'm wondering what my options are in the modern Windows 10/Java/Launch4J landscape. Are there tools that will help me script together MSIs quickly, or do I have to write my own in, say, C#/.NET and have that be a separate binary/project? If MSIs aren't an option, what options exist that might hit all my bullets above?
I realize I could just distribute the whole thing as a ZIP, and have the installation process look something like:
Save the ZIP to some place on the user's machine, say, the Desktop
Move the previous app and its artifacts to the trash, manually
Unzip the new ZIP
However that feels janky and I'm looking for something more professional. Any solutions here?
JDK 8 is bundled with a tool called javapackager (formerly javafxpackager) which is part of JavaFX. However, you can use it package java swing application without using JavaFX. This tool can generate an installer file (exe or msi) which contains the application and the Java runtime as well.
Here is an example:
javapackager -deploy -native exe -Bruntime="C:\Program Files\Java\jdk1.8.0_66\jre" -Bicon=app_icon.ico -BsystemWide=true -BshortcutHint=true -outdir packages -outfile appFile -srcdir dist -srcfiles MyApp.jar;COPYING.txt -appclass somePackage.MainClass -BlicenseFile=COPYING.txt -name appName -title "The application name"
For more information, see adding icon to bundle using javapackager
There is also a new tool called jpackage which is based on javapackager. It is proposed to be released with the next JDK release, JDK 14. Note that javapackager was removed from JDK since version 11 as part of the removal of JavaFX.
See A Brief Example Using the Early Access jpackage Utility
Tools: Some deployment tools information:
Multi-Platform Installers
List of the major MSI installer tools
WiX quick start tips (the open source, free tool with a heavy learning curve)
"Hello WiX - step-by-step in Visual Studio"
"Hello World" - WiX style
Advanced Installer: As stated in a comment above you can use Advanced Installer to install Java applications on Windows and Mac (no Linux support).
Videos: Here are some videos from Advanced Installer (commercial tool) on Java installations:
Hello Java Installer: 1 minute video that shows the basics of installing a Java application
List of Java-related videos: https://www.youtube.com/user/AdvancedInstaller/search?query=java+jre
Tutorial (to read): Package your Java application for Windows and for Mac OS. Java landing page.
Digression: Not Java as such - do have a skim. Auto-updating applications using various deployment technologies: What is the best practice to auto upgrade MSI based application?
Links:
Make Installer of java Application
Installer for Java Web Application
How to create windows installer
How to create a MSI Windows installer for a Java program?
Old: How can I convert my Java program to an .exe file?
I'm really tired of computers not having the necessary Java version I need, or I don't have admin privileges to install it. I've seen tons of windows tutorials, but I'm on a Mac. So can someone tell me how to put Java 7/8 on a flash drive, and how to create a script to run a jar file with the version on my drive I have selected? Thanks! I'm on Mac OS X 10.10
Based on your comment to another answer
I have a computer I can do it on with admin privileges
It sounds like you just want to have the JVM/JDK on some portable media that you can run from after you plug it into another computer. This should be simple assuming you only plan on using it on comparable systems. For example, you won't reliably (or at all) be able to install Mac x64 java binaries on a flash drive and try to run it on a Windows machine.
So assuming you only intend to run it on comparable machines, it's as simple as copying the directory structure from the root of the Java install directory. On my Mac OsX 10.9.5 it's /Library/Java/Home. Once you have it on the drive, you just plug it into another Mac. It should automount and you open up a terminal to the root of that mount. cd into the $JAVACOPY/bin (where $JAVACOPY is the directory structure you copied) and you can run ./java -version to verify you are running it.
If all is well after doing that, you can launch any JAR file from that flash drive mount directory with
cd /Volumes/flashMount/Java/Home/;
./bin/java -jar /Users/myuserid/myJar.jar
Keep in mind that Java doesn't strictly require any of the formal install process that systems like Mac and Windows surround it with. All of the fluff involved with "installing" java is about setting up the system to use whichever Java version is installed without the user having to know or care. But you can have as many versions of java as you want in the file system without "installing" them and they should all function just fine (ignoring classpath collisions for certain libraries.)
I have a working Java SWING-based desktop application, and I'm being asked if it can be run on the Microsoft Surface Pro or Pro 2. As I understand it, these are using stock Windows 8/8.1 and will be able to run any Windows app normally, is this correct?
Are there any caveats or special considerations when running my app on these devices?
Edit: If it matters, the JRE would be distributed together with the application, so installing Java isnt an issue.
... will be able to run any Windows app normally, is this correct?
You will be able to run Java programs, but only in Desktop mode after installing the JRE. Java 7 Update 10 added official support. See Java on Windows 8 FAQ.
By default, Java is not installed on the Surface Pro. There is no java.exe or javac.exe when attempting to run from the command line. You have to go to Oracle and fetch it.
I was able to install the JRE on my Surface Pro. The package was installed in C:\Program Files (x86)\Java\jre7\bin. After the install, java.exe -version worked from the command line (after fixing PATH). The install also included an IE plugin, and it appears to have worked with IE 10 from the tablet. I was also able to install the x64 JRE. I did not try to install the JDK.
There may be something offered on the Windows App Store, too. But I don't use the store, so I don't know.
I designed a GUI program using Netbeans 6.5 on a computer running Vista. I uploaded it to my server and tested out the web start. It worked fine.
Later when using a Mac, it was not able to work. I tested it out in Ubuntu and was unsuccessful as well. I even tried to compile the source code on Ubuntu and I got this:
Task required to generate JNLP file is missing, probably the library 'JWS Ant Tasks' is missing either from shared folder or from IDE installation.
Basically the Java Desktop Application ran fine on the Windows computer but will not run on other computers. I just created a test Application on the Ubuntu computer, uploaded it and it ran fine.
How come the program I compiled and ran yesterday on a computer running Vista will not run on Ubuntu?
Thanks.
I guess, you might be having 64 bit JRE there on Ubuntu. Use 32 bit JRE, as far as I know JWS doesn't work with 64 bit.
Use the argument java-vm-args if you are having both 64 and 32 bit versions. Below is the example.
<j2se version="1.5+" initial-heap-size="128m" max-heap-size="256m" java-vm-args="-d32"/>