I second jamesh above.
ANTLR is more fully featured: it is a
much more out the box compiler
compiler - lexing, parsing, AST, tree
transformations and code generation.
For JavaCC, it is much more a Parser
generator than a compiler compiler.
AST support is provided through
another lib called JJTree.
From my personal experience, you can do a lot more things with ANTLR, including passing parameter between rules and through all the sub-rules, which helps a lot while making a complex parser, like the parser for C#. Also, the rule re-writing is a classic too. It helps you to format your ideal AST easily.
However, it's really heavy. For a simple project, you probably will never use these functionalities. Javacc is cooler for it.