Java is designed to be cross platform. In this case instead of targeting an operating system, you are targeting another virtual environment. While not perfect, it works much more often out of the box than WINE does.
.NET also targets a virtual environment, called the Common Language Runtime. It's the same concept as the JVM. There is absolutely no WINE involved with running Mono apps on other platforms; they run on a native implementation of the CLR on that platform.
Microsoft themselves only implemented the CLR on one platform, but that doesn't mean it wasn't also designed to be corss-platform. It even has means of querying the platform (usually via System.Environment) rather than assuming Windows-isms.