Tuesday Jun 30, 2009

If you're a Mac user and access javafx.com pages with embedded applets,, such as the JavaFX samples or documents on the Learn page, you may have noticed a new warning popping up, even for applets you've run before:

Unrestricted access dialog box on Mac

This new dialog box is appearing because Apple has changed to a site/URL-based security model in one of its recent Java updates. You can keep this message from popping up repeatedly by selecting the checkbox that says Allow all applets from "javafx.com" access.

Monday Jun 29, 2009

Here's a quick-and-easy video player written in the JavaFX Script programming language. First, place your video clip into the same directory as this source code. Next, edit the code in red (clip name, scene with, and scene height) to match your particular video. Finally, compile and run the program. Clicking on the screen will pause/unpause playback.

Step 1: Add Import Statements

import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.paint.Color;
import javafx.scene.media.*;

Step 2: Define Media-Related Variables

def vid = "{__DIR__}video-clip.flv"; // CHANGE AS NEEDED

var isPlaying = false;

def myMediaPlayer = MediaPlayer {
        media: Media {source: vid}
}

def myMediaView = MediaView {

    onMousePressed: function(event){

        // take action
        if(isPlaying){
            myMediaPlayer.pause();
        }else{
            myMediaPlayer.play();
        }

        // toggle play state
            isPlaying = not isPlaying;
    }

    mediaPlayer: myMediaPlayer
}

Step 3: Render Player

function run(){
    Stage {
        title: "JavaFX Video Player"
        scene: Scene {
            width: 800 // CHANGE AS NEEDED
            height: 600 // CHANGE AS NEEDED

            fill: Color.BLACK
            content: [myMediaView]
        }
    }   
}

Friday Jun 19, 2009

I've written 4 blog articles on the JavaFX sequence implementation that should be of interest to those who want to know how it works and what it costs.  This covers the 1.2 Marina implementation.

This is probably the best order to read them:
http://per.bothner.com/blog/2009/JavaFX-sequence-basics/
http://per.bothner.com/blog/2009/JavaFX-unboxed-sequences/
http://per.bothner.com/blog/2009/JavaFX-sequence-updating/
http://per.bothner.com/blog/2009/JavaFX-sequence-triggers/

Wednesday Jun 10, 2009

First look - download JavaFX 1.2 to preview. Test this newest version of the JavaFX 1.2 SDK for yourself and tell the world what you think. Post a blog about the features you like most or describing your experience using JavaFX and enter for a chance to win $500 or a $25 amazon.com gift certificate. 


Tuesday Jun 09, 2009

Technically I'm on vacation this week so don't mention this post to my boss. I simply couldn't wait to blog about cool stuff we put into JavaFX 1.2. Shhhhh!

Lots of JavaFX related things were announced at JavaOne, many of them concerning future products and other bits that aren't released yet. This post won't cover any of those. There were so many things discussed at JavaOne that I'm afraid some of the key points of the new JavaFX might have been missed. In this post I'm only going to cover the things that you can actually download and work with today. I'm talking only about the new version of JavaFX, previously codenamed Marina, and now called JavaFX 1.2. Without further ado, here is my personal list of the most important features.

Top 5 Most Important Features in JavaFX 1.2

Linux and Solaris support

Support for JavaFX under Linux and Solaris has been a long time coming. It's always been in our continuous build system and we really wanted to ship it with the 1.0 release, but too many things were broken. Finally, after much hard work, we have a beta release. Our goal is to make Solaris and Linux equal platforms with Windows and Mac in the JavaFX world. JavaFX is about having one Java across all of the screens (Desktop/Mobile/TV) as well as all of the OSes (Mac/Win/Linux/Solaris). This is one more step towards that goal.

Some features still don't work, which is why we are calling it a beta release, but it's a good starting point. We are now using GStreamer for the video support, which was one of the key features previously missing. You will get some graphics hardware acceleration depending on your distro and configuration. Shaped windows do not work yet. This is due to a bug in the underlying JRE. The graphics guys say they have a fix which will be rolled out into Java 6 and OpenJDK soon, so you won't have to wait until the next release of JavaFX for cool rounded windows.

[screenshot]

Controls and Layout

JavaFX has had great graphics but at the 1.0 release had only a single native UI control, TextBox. It's kinda hard to make a real business oriented application using only text controls. That's all changed now. JavaFX 1.2 has real UI controls, designed for the 21st century. We looked at everything we always loved and hated about Swing, and considered long term UI toolkit trends. Then we build a new control and layout API that addresses the kinds of applications people need to build today. Here's just a taste of what's in the new controls:

  • All controls are skinnable with CSS, so a designer can create a common look across all of your applications.
  • There is a new modern default look and feel, Caspian, designed to look at home across OSes and on mobile devices
  • Controls are in the common profile, meaning they will work on all devices, not just desktops.
  • New controls for standard features like progress indicators and the hyper link
  • All built on top of the JavaFX scene graph, so there are no remnants of AWT.

Along with the controls is a new layout system that addresses the biggest problems with the AWT layouts. It is now super easy to mix layout with animation, and to create custom layouts using only a few lines of code. With controls we can build real business applications that run across multiple screens.

There are a few controls missing from the current list. In particular you will notice the absence of Table and Tree. It's not that we don't have plans for them. There simply wasn't enough time and we didn't want to hold back the release. Rest assured they are coming.

PreviewScreenSnapz001.png
PreviewScreenSnapz002.png

Charts

Along with controls the most important feature for building business applications is charts. Charts are such a common request that we built them into JavaFX. All of the standard chart types are there, including pie, scatter, and bar charts. They are very easy to use and customize. You can also create your own chart types using a few lines of code. Here's a few examples.


Data: Persistence, RSS/Atom, and Tasks

Previously you could work with data only by dropping down to Java code. This would be fine except for the fact that mobile Java code is different than desktop Java code. In addition, every form of Java has it's own special API for persisting data. To fix this problem we've added new support to JavaFX common profile to hide these kinds of platform differences and let you get back to coding great apps. Here's a quick list of the new stuff:

  • javafx.io.Storage for persisting data locally on any client platform
  • javafx.data.feed.* built in support for RSS and Atom data feeds
  • DateTime, Math, and Properties as JavaFX classes
  • javafx.async.* base classes for all asynchronous operations in JavaFX, including a clean way to implement Java based tasks

Speeeeeeed

Our goal is for every updated to JavaFX to be faster, and I think we definitely hit that goal. Across the board you will find JavaFX 1.2 to be faster than 1.1 and 1.0. In terms of startup time, memory usage, and graphics performance we have improved every part of the JavaFX user experience. For certain tasks you will see as much as a 3x improvement over the previous release.

To achieve this speed improvement we revisited almost every part of the platform. The compiler switched from using true multiple inheritance to mixins. This eliminates most of the nasty corner cases that gave multiple inheritance a bad name while providing what developers want 90% of the time. As a side benefit the underlying compiled bytecode is smaller and faster.

The graphics team did a lot of work redesigning the scenegraph to handle updates to the scene more intelligently. The result is fewer repaints and a more responsive user interface.

There were also bug fixes across the board to the video & audio stack and the underlying graphics pipeline. In addition, we put a lot of work into JavaSE 6 update 14 to reduce startup time and improve webstart performance. Over all you will find JavaFX 1.2 to be faster and smoother than the previous releases.

SafariScreenSnapz021.png

Just the beginning

The five features I listed above are just a small part of the many improvements in JavaFX 1.2. What's most important is this is part of a larger plan to have regular smaller releases of the JavaFX platform rather than the huge 2+ year release cycles of the JRE. Faster and smaller releases ensure that we ship high quality software to you faster, and lets us better incorporate your feedback. If there is any feature you feel is missing please send us a note or file a bug at javafx-jira.kenai.com.

Back to vacation for the week and then time to dive into the next release. Please let us know how you like JavaFX 1.2 and what you are are building with it.

Wednesday Jun 03, 2009

If you are interesting in trying out JavaFX running on a real phone, we are offering HTC Diamond handsets preloaded with JavaFX and a couple of sample applications for sale at the show in the JavaOne Store.  Click here for Peter Pilgram's (one of the Java Champions) AudioBlog on this subject!