Often, when an exception is caused on the client side by client code, the exception is not printed out on the client side.  Instead, because of something in the way RMI works, the server gets this exception.  It is caught and printed out on the server side.  An example of how to recreate this follows:

At the beginning of an RMI Client's FE startGame function, force a null pointer exception.  (For example, include the code: "Vector temp = new Vector(); temp.get(0);")  Now, run that client.  When its startGame function is called, you will see that the exception shows up on the server side --not the client's!  (If this does not reproduce the error, try running it a few more times, or force a null pointer exception elsewhere.  Eventually, you will see this error popping up on the server side.)

This could be very problematic for developing clients to work with a non-local server.  If the client does not know what exception has occurred, it will be very hard to locate and fix the bug.

Note that there is a way around this problem, but it is a "hack."  If the client spins off the exception-causing code inside a thread, then the exception will appear on the client side instead of the server's.  We are not clear on why this makes a difference, but it is a useful debugging tool.  However, the client may not have much idea where the exception is occurring, so they won't know exactly what code to spin off into a thread.