You can make it progressively harder, but a technically sophisticated user will always be able to recover the bytecodes, and run that through a decompiler.
If you can require the user to be online, it may be feasible to have the application call a
servlet, and execute crucial code on the server, and then send the results back to the application.