Most of the Java hate I see comes from C# fans (which is ironic given C#'s origins).
C# does away with a lot of the boilerplate code necessary in Java (i.e. type inferencing, concise lambdas with true closure instead of anonymous single method classes, yield return for lazy enumerables). By baking this syntax sugar into the language, it removes the need for all of the enterprisey patterns needed in Java to accomplish the same things.