It isn't that I don't like one language or other. I just think that languages are appropriate in only specific contexts. Using the wrong language in the wrong context is just going to be painful. That is true for Java, C++ and just about anything else.
Java was heavily marketed as the end-all, be-all, platform-independent, write-once-run-anywhere, safe-web-browsing language. It failed miserably on all of those fronts. There are a few applications where Java is a very good choice. We had a satellite simulator written in Java that was very impressive. It was many times better than the older generation. Back in 2002 I saw Java running in an embedded environment with a custom graphical display (video poker machine) and that was an excellent application. Obviously the Android folks saw Java's potential in that environment too. Those are the exceptions, however. Usually when I see someone doing something in Java, it is just a mess.
C++'s problem is that it is just way too hard to do right. It has virtually no low-level architecture support for things that software actually needs to do. It turns out that those things are quite hard to do well. Then people build these huge systems on C++ founded upon a very flaky layer sitting between the operating system and application logic. C++ is kind of schizophrenic too. People use it as an object-oriented language but it just doesn't have the runtime support for that. It is better as a generic, template language but such code is virtually impossible to write.
Unfortunately, both Java and C++ have been used a teaching languages to the detriment of new programmers, the industry, and pretty much everyone. They are both exceptionally bad at that. I was in the last generation to learn with a language designed to be used as a teaching language - Pascal. Apple was one of the few companies to use Pascal for a real application. Writing Windows apps with Borland's Delphi compiler (object Pascal) was a dream.
People who use Java in an enterprise environment do so because Java runs on Windows, maximizes billable hours, is easy to write, and has an unimaginable amount of libraries. People who use C++ do so to prove how smart they are. That is why C++ is gaining new favour in universities because it helps to weed out people. I was once in that camp and was very proud of my C++ prowess but I finally figured out that I was only wasting my time.
For all it's faults, C is still the best general purpose language for learning and doing real world. Apple's Objective-C adds object-oriented logic to write complex, GUI software. Objective-c isn't appropriate for all tasks. Perl, JavaScript, PHP, and XSL are other languages that I like and use on a regular basis. Each is good for some tasks but not others. The problem is that when people are first learning, they want to learn fast and have an app in six months. That just isn't going to happen. In technical complexity, software development is one of the most difficult jobs people do. You can learn brain surgery in six months too, but it will be messy.