My question is similar to the one asked in this forum in 2010 - "is JRE installed in Windows & Linux?". And I am wondering if things have changed since then
In particular, my site hosts a downloadable Java application that basically transmits specific files from the user's PC to our server. But every now and then I find that some of my users - all non-techies - don't have JRE installed. And hence, I have to ask them to install JRE first.
Asking users to download something before they can start using my application can only ruin the end user experience. Understandably, that is a no-no. And so, I am ready to re-implement the application. But before I can propose re-implementing the app in some other technology - like Qt - I need facts to make a case. In particular, I would like to know
Is it safe to assume that any PC with an OS that is XP or above would have JRE installed on it?
Is Qt a viable - and preferable - option for making a "download-now-use-now" type of application? Don't Qt applications need a JRE equivalent too?
Are Qt applications able to update themselves like Java apps can?
Other than having to maintain/compile multiple versions of Qt, are there any other disadvantages to using Qt?
Thanks for your responses
Abhinav
No, it is still not safe to assume that every machine had the JRE installed, though it is easy to install for every machine.from the Java website. Java is not installed by default on any Windows computer but I believe it is installed by default in many Linux distributions.
Qt is a GUI front end system for other programming languages. I know of Qt implementations for C, Python and now Java. If you are intending to use Java Qt then you will need to use the JRE to run it, it is not a way to get around restrictions of Java but is instead a way to make applications look consistent even though they are written in different languages.
A Java Qt application will have the same abilities as a normal Java application in terms of updating.
Related
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 2 years ago.
Improve this question
I wonder is someone tried to create either kinda open standard for cross-platform installer for an application or the installer implementation? That means you can simply download single file from the website, and it's extension recognizable by any popular operating system? We have .pkg and .dmg files for mac, .msi and plain .exe installers for windows, .deb packages for linux (in case of debian), but we haven't universal for each platform (like .uoi (Universal Open Installer), lol).
One might think that this approach is impossible because every OS has it's own structure and files organization, but this installer could potentially contain instructions for each OS simultaneously, and it may contain even shared files (like pictures, textures or sounds) as they can be reused for each platform and they are platform-independent.
I think it's a good idea to implement such installer, free for all and open-source
"Mainstream": A shared packaging format seems elusive. However, there are a few multi-platform deployment tools available. Installsite.org has a list towards the bottom here. I guess the two most commonly used tools are (both are commercial):
Advanced Installer for Java / Advanced Installer Enterprise (Windows and Mac, no Linux)
Flexera InstallAnywhere (Windows, Mac, Linux)
Extended Universe: There are several other tools, one of which is Bitrock
InstallBuilder - a tool I know nothing about, so I can neither recommend nor dismiss it. There is also the QtInstaller Framework which I have yet to try. Seen people recommend install4j. Here is the install4j site: What are good InstallAnywhere replacements for installing a Java EE application?
Then there is Zero Install - a cross-platform packaging and distributions software - uncharted territory for me. And Steam, the cross-platform video game distribution, licensing and social game-play platform, developed and maintained by Valve. Used to shop for, download, install, update, uninstall and back up video games. It works on Windows, OS X and Linux. Similar to Steam is Uplay from Ubisoft - another video game distribution platform. Maybe PyInstaller should be mentioned? (cross platform Python programs).
Java: I encountered Oracle Universal Installer some time back in a SO question. A Java-based installer for Oracle tools. A mystery-tool. The now deprecated Java Applets of old, and the soon to be obsolete Java Web Start feature should be mentioned as cross-platform. Developers are supposed to migrate to jlink before the end of 2020 - Oracle PDF: Java Client Roadmap Update - Oracle PDF: Java Client Roadmap Update (superseded).
Future?: Not much in the realm of a real answer, but some pointers. As I keep repeating, I don't know much about these tools to be honest. I guess recent XML / Zip-based formats can be made cross-platform more easily than previous technologies such as Windows's COM structured storage files (the old MS Office file format, a file-system in a file essentially - streams of data) that were used for MSI installers. Time will tell. In the age of the cloud, who knows what will surface?
Struggle: I can, however, tell you that I have been struggling with multi-platform installers as a corporate application packager (not developing setups, just deploying them), and these multi-platform installers have always been problematic to deal with. Very non-standard and high astonishment factor at times to deal with. For example: you launch a setup.exe which only launches a second setup.exe and then exits reporting nothing sensible, so you don't know what happened to the actual install that was kicked of asynchronously at all. That kind of stuff. So you have to write weird scripts to check installation progress, etc... Dealing with a multi-platform installer has never been fun.
Some Links:
https://en.wikipedia.org/wiki/List_of_software_package_management_systems
http://www.pyinstaller.org/ (cross platform Python programs)
https://en.wikipedia.org/wiki/List_of_installation_software (maybe check Installer VISE)
https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/self-contained-packaging.html
http://izpack.org/downloads/
Old mentions:
How can I convert my Java program to an .exe file?
Make Installer of java Application
What are good InstallAnywhere replacements for installing a Java EE application?
What is the best practice to auto upgrade MSI based application?
How to create a MSI Windows installer for a Java program?
Creating an installer for Java desktop application
https://stackoverflow.com/tags/java-web-start/info
I have used install builder and yeah its crossplatform.. the downside is you have to pay..
I want to port my C# WinForms application to be usable both with Windows and Linux. I have some experience with Java and more experience with Python but I don't really like the first and I'm concerned with the second (I mean the obfuscation, need to install Python on the target PC, etc.) so I've chosen to use Vala and GTK3 toolkit... it is created mainly for making GNOME applications but I've read that it's multiplatform and is compiled fully to C also with all the dependences needed for running the software - but is it right? I mean: would I meet any limitations while creating my application on Linux? I don't want to finish it and then to discover it can't be run on Windows because I've used some GNOME library...
There are a lot of GTK applications that currently work on Windows with no problem.
For example:
GIMP (raster graphics tool - the application for which GTK was built initially)
Inkscape (vector graphics tool)
Geany (Text editor)
Pidgin
Vala apps will work anywhere a GTK apps will. Can't name a Vala app i've seen running on windows but i'll take an interest in this and get back to you.
By the way there are two (maybe several) approaches to writing the app in Vala/GTK, for example including the entire GTK library into the app or not. Geany offers 2 different binary installers meant to allow you to choose if you already have GTK on your windows download a lighter geany-only instaler, if not download the full installer which incorporates its version of GTK.
Here's a site and a tool that will help you with configuring your vala compiler to output windows executables.
I'm not sure if you can use all the tools that Vala needs on Windows. You may have to develop on a linux box.
I've been debating whether or not to bundle a JRE with my application. I've listed some reasons below why I think it would be useful, but I'm also hesitant to do this because it makes the app much larger.
Why I think it would be useful:
Right now the app is run by running a batch file (well, a shortcut to a batch file, it is run via a batch file). It just calls java -jar XXX, which requires Java to be in the path, which is not always the case.
We're a small team and not fully running on Java 7 (there are some strange errors we are trying to debug still). If a user has Java 7, they may have an unpleasant software experience - this is not good for us. Packaging a specific version of the JRE ensure we've fully tested on it.
We support 32 and 64 bit Windows platforms. When the user downloads the software, they choose 32 or 64-bit, but this is asking which version of Java are they using. Most users don't know if 32-bit java is installed on their 64-bit platform, and it can be confusing to download 32-bit even though their OS is 64-bit.
There are some good reasons why not to package it though:
If a security hole is in Java or other significant updates are made to the JRE, we need to distribute a new version of our app with a new Java version. We are generally updating our app every couple of weeks, so I'm not too concerned about this one right now.
The app will now be much larger because it includes a packaged JRE.
Can anyone provide some guidance as to whether or not (based on these requirements) they think it is a good idea to package the JRE? If not, what are some alternatives to just hoping that java is in the path (and more importantly if it's not, it is possible our users may not know how to add it).
Java Web Start. The JRE will be on the path.
For version control, see Java Web Start - Runtime Versioning & particularly Earlier Version.
JWS can partition resources between a 64 bit & 32 bit JRE.
So, 'bad idea to bundle JRE'. Use web-start instead.
I would suggest to NOT bundle the JRE although I often see it as a common practice.
Instead I would either use webstart (can be used offline as well) or some other installer or pacakge manager solution that ensures that Java is installed including the correct version. This will widely depend on the operating system you expect to run on.
Going down the way of including Java begs the question what else you want to include, just to be sure... which will lead you to the whole operating system and everything needed thought to the end.
I would also suggest to closely look into what types of users will install the app and adapt to that and make some sort of estimate on how capable they will be.
I'm looking to get something that can create apps for Mac and Windows. It also seems that RealBasic can also create applications that have some sort of SQLLite DB built in. This is nice for standalone apps that need to save state/data.
I have Flash, which can create executables for Mac and Windows, but it doesn't have the easy database packaging or integration.
What are some other comparable products like RealBasic?
You can check out LiveCode
I do not have any experience using it but it also claims to support cross platform application development across Mac / Windows / Linux etc
Also, i think this product is what used to be called "Revolution" so it has been around atleast for a few years now - Revolution has been around since before 2001 to the best of my knowledge
The main problem with using Java is that the UI won't have the native look and feel of the platform it's running on. Sometimes that won't matter. But I've found that for most endusers the UI is a big deal.
Contrary to the above answer, RealBasic has never used an "interpreted runtime". It's compiled to machine code and linked to the runtime. These days it's compiled into LLVM instructions first before being compiled into machine code. So it's definitely faster than Java. It's main weakness seems to be the stigma attached to any language based on Basic.
I was using RealBasic for many years, due to its cross-platform capabilities. RealBasic was very long the only product that really managed both worlds.
With OS X 10.4 JAVA became a real alternative for RealBasic. On Windows JAVA was running well for several years, and with 10.4 it was also running well on OS X now.
The only thing with JAVA is: You need to have a JRE on the target system (OS X always has, Windows usually has but not always) - that is the only bad thing about JAVA. RealBasic is also "only an Interpreted runtime" - but it brings it's runtime in the binary, what on the other hand makes RealBasic .exe really huge if you compare them to a VB-project.
With 10.4 I decided to change to JAVA for Crossplatform-Development and from my point of view today, it was the best decission I could make.
You can try with Adobe Flex (now Apache Flex)
Flex for Web Apps (RIA apps) using web services (php, coldfusion, java, asp.net, etc)
AIR for Desktop (Windows, Mac)
AIR for mobile (Android, iOS, BlackBerry)
if you use AIR, then you need install AIR runtime
sorry for my bad english
I've written an application using gtkmm and libpcap under Linux. Of course, gtkmm depends on GTK+.
After porting it to Windows and attempting to distribute it, the feedback I received is that there are too many dependencies to install.
The user has to run installers for the GTK+, gtkmm, and winpcap runtimes before they can run my little application, which admittedly is a pain.
GIMP for Windows seems to use an installer that launches a GTK+ installer if needed, but doing that for three different libraries seems a little excessive, especially in terms of the installer size.
Is there a better way to distribute this? I believe winpcap actually has to install a service, so it probably has to run the installer, but maybe I could bundle the GTK+/gtkmm libraries in the runtime folder?
I'm quite a bit more familiar with Linux development, so I'm not sure what the best course of action is.
I highly recommend using a tool like Advanced Installer to deal with this for you. Making a proper installer on windows is a real headache, so it's well worth your time to use a GUI tool to help you out. AI (and other installers, for that matter) can install and manage windows services, prerequisites, and so on, and in the long run you'll save a lot of time by using a tool like this to help with your deployment. Advanced Installer in particular has very good support for managing different dependencies, along with their associated versions, and it can also install a native Windows service during the install process. They have a freeware version, but depending on the nature of your product, you might want to spring for one of the commercial versions.
Basically, if you're serious about deploying on Windows, you should invest the time (and money, possibly) to make a proper MSI-style installer. Not to knock the NSIS crowd, but making non-standard Windows installers always results in a lot more work for the developer, and a more uncomfortable experience for the end user.
If you want to manually package the GTKmm runtime, see this link at gnome.org for more details (look under Redistributing). You can also silently run the GTKmm installer using the /S flag.