Well, looking at it, at least one problem is that you don't set message to null after deleting it. The next time drawAll() is called without an intervening initMessage(), it tries to draw and delete an already deleted message.