just the executable file to run (if possible on Windows/Linux/Mac).
This can be done with Qt C++ by writing portable code and using static linking to bind the DLL's. A downside to this is that you will end up with a much larger executable file. Java uses the JVM which rules it out like you stated.
It should be noted that the platform you compile it for will be the only target the executable works on. So a program compiled on Windows won't work on Ubuntu (you will need to compile a seperate version for that - Unless you install the .exe in Wine perhaps).