There is a compatibility issue preventing the Java 7 runtime from launching on OS X platforms lacking hardware-accelerated OpenGL support, including OS X VMware virtual machines running on Fusion and ESXi.
The script attached to this document applies a binary patch to liblwawt.dylib in the Java 7 Runtime Environment for Mac OS (the JRE) to address this specific problem.
Installation instructions are included in this document.
Environment: OS X 10.8 guest on VMware Fusion or ESXi, with Java 7 installed in the guest.
Symptom: Java applications (including the Java Control Panel) fail to launch, with the guest OS presenting a dialog box such as:
Java Control Panel quit unexpectedly while
using the libjvm.dylib plug-in.
Click Reopen to open the application again. Click Report
to see more detailed information and send a report to
Apple.
The following text is present in the error report:
Crashed Thread: <nn> Java: Java2D Queue Flusher
Exception Type: EXC_BAD_ACCESS (SIGABRT)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000000003b0
The crash occurs in function glGetString; That function name should be visible in the stack trace of the crashed thread.
Cause: The JRE assumes that hardware-accelerated graphics are available. Without hardware acceleration, no suitable pixel formats are found while initializing OpenGL. This triggers a failure in the initialization of the CGLGraphicsContext, and a later attempt to query the graphics context by an indirect function call in glGetString fails due to the lack of a functional graphics context.
Remedy: Removing the kCGLPFAAccelerated, kCGLPFAFullScreen and kCGLPFAPBuffer attributes from the pixel format request allows the software renderer to be used. This patch modifies the method +[GraphicsConfigUtil _getCGLConfigInfo:] to alter the attributes it passes to -[NSOpenGLPixelFormat initWithAttributes:] accordingly.
Installation: Copy the attached script into the affected virtual machine. In the guest's Terminal, run
sudo python ./VMware-Java7-patch.py
Enter your password if prompted. You'll get either an error message or an indication that the patch was successful.
The script creates a backup copy of the file that it modifies.
It should immediately be possible to launch Java content inside the virtual machine. No reboot is required.
Disclaimer: This has only been lightly tested. Feedback welcome! It is possible that older or newer JRE versions might not be patchable with this script.
Successfully tested with OS X 10.8.3 (12D78) and Java 7 Update 17 (build 1.7.0_17-b02). Does not work for OS X 10.7.x guests at this time: The patch applies and prevents the crash, but Java windows/frames do not display any content.