I think the future of cross-portable applications is HTM5, CSS3, and Javascript. Java (or DART ) can be used as a high-level language for generating Javascript.
I suggest you take a look at phonegap and mobilegwt for mobile devices and the Adobe Air desktop.
You can write a mobile / desktop application in Java using mobilegwt. Then you cross-compile the application for different browsers (iphone, ipad, android, blackberry, desktop) and pack javascript + html + css + images inside your own application for all platforms.
Your application can be launched from a web server (loading html and everything) or it can be a javascript application fully launched from the device; or be a mixture of two things: a javascript application, deployed to its own application and launched from the device, makes AJAX calls to the server.
These applications are often referred to as hybrid applications .
In the end, you can skip the java part and develop the html5 + css3 application with the phonegap package for different platforms. But I find that mobilegwt is capable of creating hybrid applications that look like native applications (with "appearance" and animation, they are very well implemented). And GWT helps in ensuring the scalability of the Java language (reusable components, tools, and OO) for Javascript.
For desktop, you can pack the html5 application with Adobe Air .
For video games, I think playn deserves some attention, being able to cross compile games for Desktop Java, HTML5 Browsers, Android, iOS, Flash (etc.) and create impressive results like Angry Birds for Chrome (cross-compiled with Java in Javascript).