Imagine that your long-lost father calls you up one day, says he would like to meet, and asks you where a good cafe is that you might reunite and finally meet one another. so you tell him, "go down the street, turn left, pass the gas station, and then turn right"
you race down the street to the cafe, only to find your father is not there. you wait for hours, but he never shows up, and you leave, abandoned by your father once again.
what went wrong? your instructions were so clear. Well, remember that the directions you gave were RELATIVE, as in, RELATIVE to your house. your father, who started from the airport, followed the directions and ended up lost and confused.
In launch4j and jsmooth, when you select the option to bundle a JRE with your executable it does not mean two things. The first thing that it does not mean is that everything it needs will be taken out of the JRE and placed inside the executable somewhere, making one nice tidy program. That JRE folder NEEDS to go where the EXE file goes.
The second thing it does not mean is that the EXE file will ALWAYS KNOW WHERE THE JRE FILE IS. Oh sure, it tells you in Jsmooth and launch4j to give the path to the JRE folder, but what this means is it needs a RELATIVE PATH.
If you just copy and paste the path exactly how it is to the JRE folder, not only will your executable not work, but you will never see your father again.
In order for it to work, you merely need to put the relative path. the executable will simply assume it is searching from whatever path it already is, so if your executable and your JRE folder are in the same folder together, then the relative path is simply the name of the JRE folder! put that into the path to JRE option in launch4j or jsmooth, export it, then put the whole thing together and send it to a friend!