I was not sure if it is worth the time to blog about something that might be outdated within weeks but it's so much fun that I decided to share it with you.
At Devoxx 2012 I talked to Daniel Blaukopf (Oracle) where he told me that it won't take long until JDK8 for ARM Preview will be released for the Raspberry Pi and in the beginning of December last year it happened...yipppeah
As much as I loved coding for the BeagleBoard...coding for the Raspberry Pi is even more fun and that's not because of Java/JavaFX (which is in principle the same) but more because the setup of the Raspberry Pi is much easier than the BeagleBoard.
Long story short I had a Raspberry Pi already and the second was ordered at that time so that I was able to start coding for the Pi directly after JDK 8 was released.
First of all I have to say that the instructions on the Oracle page are really good this time and you could get something up and running within a short time.
Because I started porting some of my controls to JDK8 already I was really looking forward to use some of these controls on the Pi...BUT...it didn't work :(
I was not sure why and tried different things but in the end the solution was quite simple...the Embedded team and the Desktop team at Oracle just based their SDKs on different snapshots which lead to my problems.
Don't get me wrong...the "normal" Java stuff works fine but when it comes to Custom Controls (and that's the stuff I'm interested in) you will find different behavior in JavaFX between JDK8 SE and JDK8 for ARM. The problem is only because of one class...SkinBase.
In JDK8 SkinBase moved from
In addition to this the constructor changed from
SkinBase(Control control, ControlBehavior behavior)
So that seems to be not a big deal right...you just have to adjust your Skin class and everything should be fine...
This is only correct for the JDK8 SE version because the JDK8 ARM preview is based on a different version it still takes two arguments in the constructor.
The solution for the problem was to extract the jfxrt.jar from the JDK8 ARM preview, link it to your project and compile your project against JDK7 on the Desktop. Most of the time I spent on figuring out how to compile the jar in a way that it works on the Raspberry Pi on JDK8 ARM preview.
Because it's only a temporary version and will change in the near future I won't post any source code here but I will give you the jar with the controls so you can play with it on your Raspberry Pi.
Related to the new name of the css file in JDK8 which is now Modena instead of Caspian I named the lib Enzo because of Enzo Ferrari who's company Ferrari is placed 18 km away from Modena in Italy. (You have to login to Jira to see the images of Modena and Caspian).
The lib contains the following controls:
These are the controls that you will also find in the JFXtras-labs project but implemented in a different way. I completely change the style of creating controls after I discussed with Jonathan Giles, Richard Bair and Jasper Potts.
You don't have to decompile the jar file to get the source code because I will blog about Enzo in the near future anyway and for those of you that can't wait you could find a repository on github here.
There's also a radial gauge in the package but it's work in progress so you can't really use it because it has no tickmarks at all at the moment :)
Binary jar: Enzo7.jar
Because this post has no images right now...here is one to see the controls in Action running on one of my Raspberry Pi's
The image shows my Raspberry Pi no. 3 that is connected to a 10" touch screen. In addition I've attached logitech usb audio speakers and a high power rgb led from yoctopuce. On the display you see two Lcd controls visualizing the temperature measured by my Raspberry Pi no. 1 and no. 2, two SimpleIndicator controls that visualize the temperature range of each pi and a Clock control showing the current time.
I've also recorded a little video of the setup that you could find on YouTube.
Have fun and keep coding...