Traditional obfuscators only go so far. They make the code somewhat harder to understand, but the logic is still there and with some domain knowledge the code can be understood fairly easily.
One option may be to use
gcj which can compile your classes to machine code.
Or you could encrypt all of your classes and write a custom ClassLoader to decrypt them at run time.
None of these are foolproof, but they may help deter more casual snoopers.