Java is more than a programming language, it is also a virtual machine. A program written in java does not run directly on any real computer processor (Intel, PowerPC, etc). Instead, when you run a Java program, it is running on a virtual machine, which is another piece of software that is running on your computer. This is why you must have the JRE (Java Runtime Environment) installed before you can run a Java program. The JRE provides the JVM (Java Virtual Machine) that the Java program (like a FactoryPMI client) runs on.
This allows a Java program to run on many different kinds of machines. Because it is insulated from the actual hardware, even the operating system, a Java program doesn't care if you are running it on a Windows/Intel machine, a Macintosh, or any other hardware. It only cares that there is a JVM installed.
I'm old, so I remember that in the days of DOS, each program had to have its own printer driver. WordPerfect (which was what we all used back then) had a huge list of printer drivers to choose from. Most programs only support a few major standards. This made everybody's lives difficult; the developers had to write drivers for every printer, users had to pick the write driver in every program, and printer companies had to worry about whether people would buy their printers if it didn't work with X software package. Then came Windows. For all its faults, Windows completely eliminated the printer driver problem. Each software developer only had to write one driver, namely the generic Windows printer driver. Each printer manufacturer was responsible for making its printer talk to Windows. Everybody's lives were easier.
A virtual machine is very similar. (Java isn't the only one, but will stack to it for simplicity's sake.) Each software developer writes their program in Java. It will run on ANYBODY's system that has a Java Virtual Machine, much like you can print on ANY printer that has a Windows driver. It's up to the OS vendor to make sure that their VM works, much like it's up to printer vendors to provide a driver.
You'll notice, of course, that sometimes you still have printing problems. The same is true of Java. You won't necessarily get EXACTLY the same results in ALL cases. Still, it's a lot easier than trying to recompile from source code.