Cross-platform desktop Java applications, JavaFX is not enough

I just finished to watch the JavaOne 2012 Technical Keynote. Nice, not particularly impressive though. The "Windows moment" (JVM crash) was quite funny. It happens around the 52nd minute I think. No you can't skip and if you advance too much the video won't play. Flash fails.

What bothers me and the motivation why I'm writing this post is the excessive focus on the UI in JavaFX. They made it look like it is the only concern in a multi-platform app is the UI. WRONG...

OpenJDK weirdness on OSX Leopard

This post is to document a couple of issues encountered while deploying an OpenJDK based app on OSX Leopard.
The first is a JVM crash caused by a supposedly closed bug in hotspot.
The crash happens when the sun.nio.cs.StreamDecoder.read is compiled at run-time...

Take your Java application to the Mac App Store.

In this guide I'll go through all the steps required to port your Java Swing application to OpenJDK with the goal of preparing it for the submission into the App Store. Although the App Store guidelines explicitly forbids applications to rely on deprecated or optionally installed technologies (Apple no longer bundles their JDK port so applications can't rely on the user to have it installed), you can still distribute your Java application on the App Store by embedding the OpenJDK 7 OSX port in a native OSX application.

Forking the OpenJDK for fun and profit.

At my current job I'm tasked with bringing a Java Swing application to the App Store.

The way to do it, on OSX, is to bundle a Java distribution within the application as by Apple's terms it is no longer possible to distribute applications that rely on technologies optionally installed. As such, I started looking how to bundle the OpenJDK inside an OSX application.

It turns out AppBundler does exactly that. So, task finished ? no, not quite...In the process of testing and improving our application I discovered several bugs in the OpenJDK and after a few patches we finally decided to maintain our own branch.

Our OpenJDK fork currently provides: