Tim Ewald suggests in Using Java that three categories of differences exist between Microsoft and Java projects.
First, once you environment is set up, the only difference between Java and C# is the idioms. Yes, C# has some nice features that Java does not (some will come in 1.5), but they aren't enough of an issue to make you go one way or the other.
Second, this is no OO paradigm that the Java community couldn't beat to death. Okay, maybe it's particularly bad in the XML space, but do we need layers of factories to create factories to create objects (seriously)? This isn't that big a deal either, but I wish there was a little more emphasis on practicality instead of purity.
Third, and most interesting, is the community projects. The Java world is really vibrant, with lots of stuff coming from the community. There is a vibrant .NET community too, but it seems more focused on helping people achieve things with the bits MS ships than with adding major things to what MS ships. Yes, I know there are a lot of .NET components that the community builds, but I don't know of any that have an uptake anything like JBoss, Hiberante, Struts, Velocity, etc. In the Java world, because there is no single controlling party, people are much more willing to undertake projects building tools and infrastructure for free or for profit. And, just as important, developers are willing, and in fact eager, to use them. Too many .NET developers won't embrace things that MS doesn't produce. Which is too bad because while MS has tons of smart people, it doesn't have all of them.
While I agree with Tim's categories, it seems to me that a comparison of Java v. .NET projects is a bit outdated. The discussion only makes sense when applied to LAMP v. Microsoft projects. The Java community includes open and closed-source packages written in Java, Python, C++, PHP, ...it is no longer a discussion of JRE v. CLR. I completely relate to the perspective from which Tim describes two camps. The implication is that there exists another software-tools community of comparable size (to MSDN). That camp is LAMP. And, I believe, there are fewer similarities than differences.
One difference that attracted me to LAMP was the same thing that initially excited me about .NET: application building blocks. Tim hits on this difference in point #3...but it deserves a post all its own. This single item represents differences at the core of the two disciplines. While I admit that my camp-membership still resides on the Microsoft side, I have to be honest that my overall excitement about what I can produce for my clients is MUCH stronger on the LAMP side. And that is mostly do to better wheels that have already been built...made (mostly) freely available...source-code included.