JavaFX exe bundling for x86 windows systems - deployment

usually I deploy my Java apps as a bundle which contains the JVM, so there's no need to install a JVM on the system.
Btw: This is no jnlp applet, this is a normal Swing Application.
I did this using ant's fx:deploy. This already works for 64bit systems.
My problem is, that I want to deploy this application to a 32bit system and don't get it to work.
Here's what I did:
I've set up a clean Windows 7 (32bit) instance and installed a 32bit JVM. Now i ran my ant script to build a bundled Java app and it built a App.exe.
But when I tried to start this exe by double clicking, I get the following message box
If I click OK, I get another message box
After this the app is terminated.
I did not find anything searching the web relating to bundling for 32/64 bit systems.
So I would be very glad if someone can point me in the right direction.
Many thanks in advance!
Greetings, -chris-

Looks like a known bug fixed for an upcoming JavaFX version (currently known as 2.2.40):
RT-25715 The Windows launcher generated by the packager fails to load msvcr100.dll on 32-bit OS
RT-22610 .exe created by fx:deploy can't be executed due to missing msvcr100.dll
On the bug case, the user mentions a work-around:
If I give a try to the workaround documented in RT-22610, which is to copy runtime\jre\bin\msvcr100.dll side to my application's launcher binary, it fixes it.
I think the bug is fixed in JDK 8, so another possible work-around is to download a JDK 8 early access release and use the packaging tools from there to package a Java 7 application (though I have never tried that and am not sure if it would work).

Just a small modification to #jewelsea's Fix:
copying msvcr100.dll into the app/ folder instead putting it right next to the exe also works, and at least it is somewhat hidden away then.

If you're generating an MSI you can hack the WXS file used by WIX to automatically copy msvcr100.dll into the app folder. Making FX Deploy verbose will tell you where it's putting the temporary WXS file you can copy and modify and use to override the WXS like you would the program icon for example.

Related

Problem with setting up Mingw w64 for C++. Possible conflict with existing Anaconda/Jupyter?

While I am setting up MinGW-W64 (from sourceforge) exe file (for Windows 10) for C++, it shows a message that it was not downloaded correctly. My best guess is that I have a Anaconda/Jupyter setup having MinGW-W64, and it is making all the fuss. How to set it up for both C++ (VS Code / Code lite) and Python/Jupyter/Anaconda?
Make sure you don't mix versions in environment variables like PATH.
Maybe your download was bad?
Or you may have an antivirus software preventing the installation...
You could try a standalone MinGW-w64 build from https://winlibs.com/, which doesn't requite installation - just extract the archive and point VSCode to it.

LNK1104 when using MASM 64bit

I'm currently trying to learn Assembly for x64 Windows. I tried the example code from this Intel website,
but whenever I try to compile it with the command given in the document:
ml64 hello.asm /link /subsystem:windows /defaultlib:kernel32.lib /defaultlib:user32.lib /entry:Start
I always get an
LNK1104 error
I know that it means the compiler can't find the library file, I googled the problem and quickly found that I need Visual Studio with Windows SDK, which I downloaded and installed. But still can't find a kernel32.lib or user32.lib in any files other than the Windows system files.
I tried everything and I simply can't fix it. I hope someone could help figure this out.
There is a well-known MASM32 SDK available created by hutch--. This package contains the requested libraries in a (legacy) 32-bit version.
But there is also a 64-bit update of that famous package by hutch--:
Current build of the 64 bit MASM SDK.
It should contain the .inc and .lib files you need and more...
This is the current build of the 64 bit MASM SDK. This one is a lot closer to complete and with the correct Microsoft binaries added to it, it is capable of building a wide array of application types. It can be use in 2 different ways, it should be unzipped from the root directory of the partition that it is being installed on. You can either manually add it to an installation of the MASM32 SDK OR you can install it on a partition that does not have MASM32 on it and simply rename the buildx64 directory to MASM32. Installing it on another partition is the preferred technique as QE has its menus and accessories set up for building 64 bit code.
You still need to add the Microsoft binaries which would typically be from an installation of vs2017 or from an earlier version for Win7 64. In the bin64 directory there is a file called "Microsoft_File_List.txt" which shows the files you need. The list is from the current version of Visual Studio 2017 version and if this is the version you have, use the ML64 from the "x86_amd64" directory that is 402,584 bytes in size.
In the "buildx64" directory is a batch file called "makeall.bat". This must be run to build all of the libraries and include files.
They are the gold standard of Windows assembly developing.

Attaching GDB to Eclipse to debug JNI C++ code

I'm having problems debugging a JNI application. I've read several threads in StackOverflow, like this one, this one or this one. I've also tried to start gdb in a separated shell and attach it to the running java process. In both cases, the problem is the same: GDB can't find the sources to debug. Things tried
Add "dir" line to gdbinit, pointing to C++ sources folder
Adding the C++ sources folder to the GDB debbuging configuration in Eclipse, in the "Sources" tab.
Adding set environment LD_LIBRARY_PATH=/path/to/library.so, being library.so the library file built from C++ source files
Attach ddd to the java process, but then I get an error because pthread_join.c is not found in the working directory. I don't have this file in my hard disk. I don't know what is this about.
Nothing worked. I've spent several days on this. I know my bug is in the C++ code called by the JNI wrapper, but I can't debug it. Any hints? If helps, I'm running Eclipse Juno in Debian 7 under a Parallels VM on Mac OS.
Many thanks in advance,
You need to have debug information in your native library. You should pass -g to your compiler and linker to have this information in the executable. You may also want to add -O0.
As an alternative to attaching to the Java process, you can create a C++ app and debug it directly. You just need to link in the functions you want to test. In the main function, create the VM, register the functions with RegisterNatives, and kick off a Java test class the uses them.
Hopefully, the debugger has no problem finding the sources since it is just part of the normal compile/link/debug loop of a C++ app.
I would suggest to start with the latest ADT bundle. You can even download the Mac version, so you will not even need Parallels (see a detailed instructions). Then, choose Debug Android Native Application in launch menu.

Eclipse executable launcher error: Unable to locate companion shared library

I had Eclipse Indigo installed on my computer with the Android plugin and it was working perfectly for about two weeks. Today, I updated java and quicktime then restarted my computer. When it booted back up, eclipse had completely vanished - all the program files have completely disappeared. When I try to reinstall it, I get an error message that says
The Eclipse executable launcher was unable to locate its companion shared library.
What happened and how can I fix it?
I've just encountered the same issue. The problem for me was Windows 7 default unzipper program. It has a problem when it encounters files that have a deep file structure. I read about this issue some time ago but can't recall the article. Fix for me is to unzip the Eclipse download using WinZip (or some other tool which does'nt have this issue).
Check eclipse.ini, there are two entries like:
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20120522-1813.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.200.v20120913-144807
For some twisted reason jars have version in their name - so if you upgrade/have two different version of eclipse( while eclipse.ini is either linked or provided as system wide conf file for eclipse ) it will cause above error.
That sounds pretty bad and weird. But reinstalling isn't that hard - download, unzip, change the default memory allocation, run Eclipse, install necessary plugins and features.
And almost all of the important preferences are in your workspace. The only important one I can think of outside of the workspace is the aforementioned memory allocation, which you can set on the command line or in the ECLIPSE.INI file.
During unzip in a cygwin directory on Win7, .exe and .dll need to be given executable mode. This is the solution from a mintty (or other $TERM) terminal run with cygwin on windows 7:
me#mymachine ~/eclipse
$ find . -name "*.dll" -exec chmod +x {} \;
tried with Juno (eclipse 4.2) freshly unzipped, cygwin 1.7.something
I have seen this in MacOS Sierra. Sometimes unzipping the app leaves extended attributes that seem to prevent the startup. The following command line removes extended attributes and seems to fix the problem:
xattr -c Eclipse.app
It also works for other applications that are built on the eclipse framework.
Another problem (that I ran into) is that Cygwin's unzip utility (UnZip 6.00 of 20 April 2009, by Cygwin. Original by Info-ZIP.) does not always correctly unzip everything needed for Eclipse to actually run.
Using 7ZIP v9.20 got Eclipse Indigo (3.7.2) up and running for me on Win7 64bit with 32bit JVM and 32bit Eclipse.
(First time I've ever had Cygwin's unzip fail on me...)
I just ran into this myself and found that, indeed, as one post above stated: using cygwin and gunzip or unzip to set up your eclipse environment the permissions on the .exe and .dll files will be incorrect and the JVM will not run them properly.
Quick solution:
#switch to the eclipse target folder
cd /cygdrive/c/Program\ Files\ \(x86\) #or wherever you put eclipse
find ./ -regextype posix-extended -mindepth 1 -type f -regex ".*\.exe|.*\.dll" |\
xargs chmod -v 750
I meet this issue after copy a eclipse installation to another pc.I find the eclipse installation auto created the .p2 directory on my c:\Users\xx.p2, and --launcher.library refer to here.So it doesn't exist on my another pc.
My resolution is to reinstall eclipse:
a)Double click eclipse-inst-win64.exe
b)Click to change to advanced mode.
c)Uncheck the Bundle Pool
d)Finish your installation and copy again.Everything will work well.
My experience and advice: Install Eclipse Juno on C: drive.
After download the zip, put it on C:, click the right mouse button -> extract here. Then a folder called eclipse will be created in C: drive.
Then go to Eclipse executable, run it, and all will be ok.
I faced this problem and solved it by running Eclipse as admin.
Problem happened when I unzipped using Cygwin. Used the Windows XP standard unzip program and it worked.
if you are having two eclipse then sometime this happens
you only have to remove
-startup
plugins\org.eclipse.equinox.launcher_1.0.100.v20080509-1800.jar
from eclipse.ini file beside eclipse.exe(Launcher)
Also see this related question's answer.
The gist is: Try unzipping it again with a solid unzip tool. Sometimes unzipping goes wrong, especially with the built-in Windows Explorer tool.
i have this error message when i use extract the files as follows:
action\select all
drag and drow the files to an new folder
Somehow information about the folders get lost
when i use "action\extract to..." it works.
Also, remember to right click on eclipse, then choose Security Unblock
Mostly this is related to problems on windows with the unzipping it seems. (See other answers here for that).
The second largest issue seems to be that eclipse is not able to find java or finds a java version which is too old or even older eclipse installations.
Here's another take to the latter problem and a small twist to solve it. My work environment is on a linux system, without root access, and with software installations where I can configure which versions to use in a kind of config file. However I have no influence on the way those software packages are installed and they are immutable to me.
I download and untar the latest eclipse as usual to a user disk for which I have write permissions. Then I configure myself an alias to always temporarily cd into the eclipse installation when starting. That regardless of where I work on the file systems, eclipse always finds its correct libraries. It seems in some places, eclipses default search path for java digs out an installation (of java or older eclipses or sth else) in my environment that it really should not use.
Here's the alias:
alias eclipse '(pushd /enter_path_to_eclipse_install_dir_here/eclipse ; ./eclipse ; popd)'
Now you can start it normally from e.g. your project or arbitrary work directory:
eclipse
Or also put it in the background
eclipse &
Maybe this helps for people in convoluted work environments.
Try running eclipse.exe as administrator or using Eclipse Helios.
I have copied the Eclipse folder from another machine where the path was different and that was the root of this problem. Changing the plugins path in ECLIPSE.INI worked for me !!
Solution for Mac
Reason:
Eclipse copies from one location to other
Solution:
Paths change needed in /Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse.ini
Fix path for plugins\org.eclipse.equinox.launcher_1.0.100.v20080509-1800.jar
I had the same problem when I was trying to install it on Windows 8.
But it was an zip composed file....
Ones I unzip and Run "eclipes.exe" file as run As 'Administrator' it was resolved.
Now I am enjoying it very well.
I had the same message after a system restore with the eclipse folder (V. 3/2020) being located on a second drive (that was NOT restored at the same time, I use it for large files mainly).
Restoring the faulty installations C:\Users<user>.p2 folder to the new installation (referenced in eclipse.ini of the eclipse folder) worked.
Keep shorter folder name, fixed for me.
I faced this issue recently: (In my case it was installation of STM32CubeMX software):
what I faced: I have two users in my laptop, I had installed the software in one user but on the hard disk partition: D:\
Now I had tried to work on another user!
-- I think you know why I got the error --
So as I was working on the 'other' user account, I got this error every time I tried to compile/build my project - obviously, Because I installed using one user and am working on another.
Workaround: Already mentioned in the above answers clearly!
What I did differently: I tried using the S/W in the other user, but there seems to be issues on the path file/location:
so I reinstalled the location in the user account I want to use and am running it properly now!
Note: While Installing it did ask about installing the software for all user/ current user : I mistakenly had given 'current - user' =(
I also faced ths problem, I just deleted the extracted file and extracted it again.
I have a .rar file.
This problem occurs when the file is not extracted completely.
You might changed your drive-letter:
once u had installed eclipse on D:\, after windows reinstall the drive-letter is now E:\ (for example).
look into eclipse.ini in your eclipse folder, there are some lines where the drive-letter is still D:\
This happened to me when I tried to open eclipse.exe before the .zip file finished extracting. Make sure all dependencies are unzipped or unpacked before opening the .exe.
I had this issue on Linux (CentOS 7 64 bit) with 32-bit Eclipse Neon and 32-bit JRE 8. Non of the answers here or in similar questions were helpful, so I thought it can help someone.
Equinox launcher (eclipse executable) is reading the plugins/ directory and then searches for eclipse_xxxx.so/dll in org.eclipse.equinox.launcher.<os>_<version>/. Typically, the problem is in eclipse.ini pointing to the wrong version of Equinox launcher plugin. But, if the file system uses 64-bit inodes, such as XFS and one of the files gets inode number above 4294967296, then the launcher fails reading the plugins/ directory and this error message pops up. Use ls -li <eclipse>/plugins/ to check the inode numbers.
In my case, moving to another mount with 32-bit inodes resolved the problem.
See: http://www.tcm.phy.cam.ac.uk/sw/inodes64.html
I encountered this error with the Eclipse 4.10 installer. We had failed to complete the install correctly due to platform security settings and attempted to uninstall but had to do it by hand since no uninstaller was introduced during the failed install. We suspected this corrupted the end result - even after re-installing.
The solution was to use the JVM to launch Eclipse and bypass the launcher executable entirely. The following command successfully launches Eclipse 4.10 (some parameters will change based on the version of Eclipse):
%JDK190%\bin\javaw.exe -jar C:\<fully_qualified_path_to_eclipse>\Eclipse410\plugins\org.eclipse.equinox.launcher_1.5.200.v20180922-1751.jar -clean -showsplash
After using this command/shortcut to launch Eclipse we had no further errors with Eclipse itself but we weren't able to use the EXE launcher in the future. Even after a year of using this version, the launcher continues to display this same error.
To be clear, you'll have to modify your javaw.exe command to match your system specifications on MS Windows.
I got similar error sometime back. I had copied the eclipse setup from another laptop to mine. The issue with my setup was that path of the "--launcher.library" in the eclipse.ini file. The path in --launcher.library was that of the old machine and hence I was getting the error
I changed the path of "--launcher.library" in eclipse.ini to the path of eclipse on my laptop and the issue got resolved. I hope this is helpful to someone is getting this error.
remove it and run eclipse-installer again without root
I have create Demo.exe using Eclipse RCP.
I have run Demo.exe using C-Drive to same error generate like...
Solution : You might changed your drive for example
C:\Demo.exe to D:\Demo.exe
Step 1 : First Copy/Cut your .exe file like C:\Demo.exe
Step 2 : After Paste another drive like D:\Demo.exe
After executable file launching successfully.
I hope my answer is useful.

Running java without installing jre?

As asked and answered here, python has a useful way of deployment without installers. Can Java do the same thing?
Is there any way to run Java's jar file without installing jre?
Is there a tool something like java2exe (win32), java2bin (linux) or java2app (mac)?
You can use Launch4j for this. Well documented and easy to use. While the resulting program still needs a JRE to run, you don't have to install the JRE on the target system. You can just copy it with your application and tell Launch4j were to find it or just wrap it up with everything else.
For creating native executables, you can use Excelsion Jet, which compiles Java to native code. We used it for a project at work, and we had to perform zero modification to the original source code (which targetted Sun's JDK).
you can embbed the JRE inside your application and create a setup or installation for your application.
You can have a look at
http://www.bearcave.com/software/java/comp_java.html
You might get it what you want.
You might want to check out how Eclipse does it - it has a native .exe that can use a local (to the installation) JRE.
You might be able to get some luck with GCJ - haven't tried it myself.
You can do it with NetBeans and a couple of tools. The result is a standalone installer that packages everything you need, so your software can run without installing JRE. It is also completely portable, because it install your software on AppData, that is, it does not need privileges to be installed. Maybe you can even configure the installation path, or you can install it on your own PC, locate the folder and copy it to distribute your software in that way.
Check the Answer I made on different post
You can use jlink to create your own customized jre which would contain only those dependencies which are needed for execution. This deployment method is really efficient. please follow **this**link for one such example.