Once dependent on the JVM forever dependent on it. So as to the question of not needing the JRE the simplistic answer is... impossible, because the code is based on functionality and JAVA code that the application uses.
That being said... some solutions are possible that can compress the JAR(s) inside an EXE, but include the JRE inside I do not know.
However and in response... the best solution is with the GCJ compiler.
GCJ can compile Java source code for Java bytecode (class files) or directly for native machine code, and Java bytecode for native machine code.
In this sense this will then be the solution to the question posed, but, "everything has a but" this solution poses some problems in the medium term regarding compatibility and maintenance during the lifetime of application as we can no longer count on what JAVA has the best in my opinion. Operating system abstraction and in particular all implicit support in JAVA tools.
I don’t think it’s possible, since you would have to install the JRE on the guy’s machine, maybe you can create some script by running the . exe "jar" it starts the script by checking if there is a JRE installed or not, if there is not you simply install the one that is "packaged", but would have a script for each platform, which would lead you to have a JRE for each platform. And then my friend It starts to get complicated.
– noNihongo