It is not recommended because:
- The standard Java tool chains do not support it.
- An exeis not portable.  Differentexeformats are used for different operating systems, hardware architectures, etcetera.
- A self-contained exefor a Java program needs to contain a full JRE.  (Do you want to distribute 100Mb "hello world" executables?)
- A Java exewith an embedded JRE is a security concern.  There is no easy way to update the JRE ... to fix the latest batch of security holes.
If (hypothetically) the Java language, libraries and tool chain supported compilation to binary + linking, then distributing exe files would be a sensible solution.  However, a lot of things that a Java application can do depend on standard Java's dynamic loading / JIT compilation implementation.
There have been / are third-party attempts to meet people's requirements for self-contained exe files, but your either end up with a Java subset1, or bloated exe files.
1 - For example, with the old GNU gcj compiler, the library was a subset of Java 2 (!) ... and (AFAIK) dynamic loading of bytecodes was not an option.  For more information on gcj limitations, see this page.