Without using any external libraries, does Java, including all officially supported APIs give you enough to develop fully-featured 2D games? The reason I ask is that I hear a lot of "bad-mouthing" about Java and game development, but I'm wondering if that is only in regard to intensive 3D games. Also reading up on some Java games there often appears to be external graphics or sound libraries involved that simply have a Java port. This makes me think it isn't possible.
In 2011 any language with bindings to OpenGL is more than capable of a "2D game" in the style of Nintendo from the 1990s or so, when running on a desktop PC made in this millennium.
For TV game consoles, the only language available for development across all platforms is C++, so that's what people use for the most complex 3D games and the simplest 2D games. Java would work for simpler games, but C++ is the compromise we live with to avoid the cost of supporting more than one language.
For handheld devices (and to a lesser extent TV game consoles) performance is critical often enough that the overhead imposed by Java et al. can't be tolerated for games with medium or high complexity.
Android phones do run games in Java, but there is a clear trend recently toward "native" C++ games on Android, not primarily for performance, but because ironically Java isn't as "platform-independent" as C++. All non-Android platforms use some kind of C/OpenGL, and porting a game among them is fairly cheap. Porting from any of them to Android/Java is relatively expensive.
In theory, nothing.
In practice, mainly the fact that not a lot of people have done it already. If you're looking for code samples or documentation you'll more likely find code written in C or C++ instead of Java.
There's nothing missing from Java that is required to make a fully featured 2d game. There are definitely games written in Java that don't use external libraries, or, use them sparingly. Most of the complaints people tend to make about Java are either the slowness of games vs C or C++ (valid, but computer speed is fast enough to make the point moot), or personal frustrations with Java (almost everyone has a language they like to hate...). Java also has a reputation for being a 'business' programming language.
The only issues that might come up from using Java is hardware acceleration. If Java's native graphics rendering is not hardware accelerated, then you'd be risking performance problems. External libraries can often solve this problem.
Of course you can. But some boring stuff you have to do at your own.
I read a book, 'killer game programming in java', and there was no external library, just Java2D. I also developed an arcade game with it...
Java can be an engine IMO, but you should really prefer another engine, which is built on top of this stuff and OpenGL.
I am currently using libGDX for my android game and I am happy so far. With it you can develop simultaneously for android and PC ;)
For modern high quality 2D graphics you'd often use 3D rendering, meaning you'd need a 3rd part 3D library for most languages anyway.
I think mostly for game development Java just doesn't do a lot that C++ or C# doesn't do, and it might be a little slower than C#.
A lot of people seem to have very strong opinions on what is good for what and what isn't, it's often a sign that they simply don't know what they are talking about.