Well that is really a good question, because I mostly avoid using inner classes myself, in almost all cases.
Now in Swing and GUIs, I use anonymous inner classes a lot, for all of the Action events that occur. this allows me to create "hook" methods in my GUI so that the GUI code does not have any code in it except to great the screen. No business logic, no Action handling etc.
So that is one example of a good use for inner classes. There are others, that I am sure some others can post here.
Other times you might need them to create an exam question for threads.