Developing Rich Interfaces in
JavaFX for Ultrabooks
Felipe Pedroso
Community Manager – Intel Brazil
Bruno Borges
Principal...
2
Program Agenda
 The Future of PCs
 JavaFX and Touch Support
 Using JNI to Work with Sensors
3
Laptops are becoming
“SmartTops”
4
First GPS-enabled
Released on 2007
5
http://www.technologyreview.com/news/409999/laptops-as-earthquake-sensors/
6
http://www.frost.com/sublib/display-report.do?id=M8F0-01-00-00-00
7
http://news.cnet.com/8301-10805_3-57542720-75/microsoft-is-right-about-touch-screen-laptops/
8
Ultrabook™
Convertible &
Detachable
Ultrabook
™TabletSmartphone
Consumption Usages Creation/Productivity
Notebook
9
The Ultrabook™ Platform
Reshaping the PC Experience
9
Ambient
Light Sensor
Ambient
Light Sensor
GPS
GPS Compass
Compass
...
10
OK, they have all those
features…
… but how can we implement them
using Java?
11
To allow users to TOUCH my Java App...
• Should I use...
– AWT? Swing? SWT?
• Actually, you can use them but...
– They ...
12
13
MULTI TOUCH
SUPPORT
14
Actions supported
• Touch events: Down, Move and Up
– Tap (Down and Up) / Double tap
– Drag and Drop (Down, Move and Up...
15
• Your components must extend the Node class or any of its
subclasses (StackPane, ImageView, etc)
• Set the proper Even...
16
• Apply a transform to the component (Translation,
Rotation and Scale):
• Let’s dive into some code!
What do I need to ...
17
WHAT ABOUT
SENSORS?
#include JNI.h
18
Available sensors on Ultrabooks
• Accelerometer
– Proper acceleration in three axis (x, y, z)
• Gyrometer
– Device orie...
19
API Windows – Sensor Fusion
20
API Windows – Namespaces
• Windows.Sensors.* Common sensors
– Accelerometer
– Gyrometer
– Inclinometer
– OrientationSen...
21
Windows API – How to
• Get the default object of your sensor using the GetDefault method
• You can call the GetCurrentR...
22
How can I access that?
23
Using JNI to access the sensors from
Windows.Sensors
1. [Java] Create a native method to register the object that will
...
24
Using JNI to access the sensors from
Windows.Sensors
5. [C++] Initialize the sensor and delegate a C++ method to
handle...
25
JNI Callback from C++ to Java
public final class ShakenSensor {
static { System.loadLibrary("ShakenLib"); }
private Sha...
26
JNI Callback from C++ to Java
// Shaken.h
JNIEXPORT jboolean JNICALL Java_sample_ShakenSensor_registerObject
(JNIEnv *,...
27
JNI Callback from C++ to Java
// Shaken.cpp
#include "Shaken.h"
#include "jni.h"
#include<iostream>
#using <Windows.win...
28
JNI Callback from C++ to Java
// Shaken.cpp
…_ShakenSensor_registerObject (JNIEnv * env, jobject obj)
{
shakenSensorJOb...
29
JNI Callback from C++ to Java
// Shaken.cpp
void Shaken(Accelerometer^ sender, AccelerometerShakenEventArgs^ args){
inv...
30
JNI Callback from C++ to Java
// Shaken.cpp
void invokeShakenOnJava(jlong timest){
JNIEnv * jniEnvironment;
int envStt ...
31
What about Linux?
Touch works fine, but there aren’t clear APIs to read
sensors. If you know how to do it, let’s work t...
32
Want to know more about Intel Software?
http://software.intel.com/en-us/
33
Windows Community
http://software.intel.com/en-us/windows
34
www.javafxcommunity.com
35
36
• The PC experience is being reshaped
• JavaFX + Touch = AWESOME
• Using JNI to access the sensors can be
LEGENDARY!
Ta...
37
Questions?
(if yes, the answer is 42)
38
Thanks a lot!
Bruno Borges
facebook.com/brunocborges
@brunoborges
Felipe Pedroso
facebook.com/felipe.a.pedroso
@felipea...
Upcoming SlideShare
Loading in …5
×

Developing Rich Interfaces in JavaFX for Ultrabooks

1,741 views

Published on

Presentation about developing JavaFX for Intel Ultrabooks, taking advantage of the multi-touch support and also sensors.

By Intel Brazil Community Manager, Felipe Pedroso and Oracle Product Manager, Bruno Borges.

Published in: Technology, Education
1 Comment
1 Like
Statistics
Notes
  • You say that 'touch works fine' on Linux, but this open bug report seems to indicate that multi-touch support is not yet implemented for JavaFX on Linux: https://javafx-jira.kenai.com/browse/RT-25079

    Where you able to get it working somehow?
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
1,741
On SlideShare
0
From Embeds
0
Number of Embeds
35
Actions
Shares
0
Downloads
24
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

Developing Rich Interfaces in JavaFX for Ultrabooks

  1. 1. Developing Rich Interfaces in JavaFX for Ultrabooks Felipe Pedroso Community Manager – Intel Brazil Bruno Borges Principal Product Manager - Oracle LAD
  2. 2. 2 Program Agenda  The Future of PCs  JavaFX and Touch Support  Using JNI to Work with Sensors
  3. 3. 3 Laptops are becoming “SmartTops”
  4. 4. 4 First GPS-enabled Released on 2007
  5. 5. 5 http://www.technologyreview.com/news/409999/laptops-as-earthquake-sensors/
  6. 6. 6 http://www.frost.com/sublib/display-report.do?id=M8F0-01-00-00-00
  7. 7. 7 http://news.cnet.com/8301-10805_3-57542720-75/microsoft-is-right-about-touch-screen-laptops/
  8. 8. 8 Ultrabook™ Convertible & Detachable Ultrabook ™TabletSmartphone Consumption Usages Creation/Productivity Notebook
  9. 9. 9 The Ultrabook™ Platform Reshaping the PC Experience 9 Ambient Light Sensor Ambient Light Sensor GPS GPS Compass Compass Near Field Communicati on Near Field Communicati on Gyroscope Gyroscope Ultrabook ™ Accelerometer Accelerometer Multi-Touch Multi-Touch Context Aware Sensors
  10. 10. 10 OK, they have all those features… … but how can we implement them using Java?
  11. 11. 11 To allow users to TOUCH my Java App... • Should I use... – AWT? Swing? SWT? • Actually, you can use them but... – They aren’t made for multi-touch (OK, there’s a way to do it) – You must optimize your UI controls to be more ‘touch friendly’ • So, how to do it in a simple and easy way?
  12. 12. 12
  13. 13. 13 MULTI TOUCH SUPPORT
  14. 14. 14 Actions supported • Touch events: Down, Move and Up – Tap (Down and Up) / Double tap – Drag and Drop (Down, Move and Up) – Hold • Gestures – Swipe: Up, Down, Left and Right – Zoom: Pinch / Spread – Rotate
  15. 15. 15 • Your components must extend the Node class or any of its subclasses (StackPane, ImageView, etc) • Set the proper EventHandler to handle the action. 15 What do I need to do to manipulate components?
  16. 16. 16 • Apply a transform to the component (Translation, Rotation and Scale): • Let’s dive into some code! What do I need to do to manipulate components?
  17. 17. 17 WHAT ABOUT SENSORS? #include JNI.h
  18. 18. 18 Available sensors on Ultrabooks • Accelerometer – Proper acceleration in three axis (x, y, z) • Gyrometer – Device orientation • Magnetometer – Strenght and direction of magnetic fields • GPS (Global Positioning System) – Location and Time information • NFC – Near Field Communication • Ambient Light Sensor – Ambient Light Level 18
  19. 19. 19 API Windows – Sensor Fusion
  20. 20. 20 API Windows – Namespaces • Windows.Sensors.* Common sensors – Accelerometer – Gyrometer – Inclinometer – OrientationSensor – SimpleOrientationSensor – Compass – LightSensor • Windows.Devices.Geolocation GPS – Geolocator • Windows.Networking.Proximity NFC – ProximityDevice
  21. 21. 21 Windows API – How to • Get the default object of your sensor using the GetDefault method • You can call the GetCurrentReading() to get the current value of the sensors or... • ... work with the ReadingChanged event – Set the attribute ReportInterval (please, respect the MinimumReportInterval to avoid problems) – Delegate a method to handle the event (something like setting a method as a listener) – Handle the event! • This procedure is valid only for sensors from Windows.Sensors namespace
  22. 22. 22 How can I access that?
  23. 23. 23 Using JNI to access the sensors from Windows.Sensors 1. [Java] Create a native method to register the object that will handle the events that come from the sensor 2. Generate the header file using javah 3. [C++] Create a DLL Project in Visual Studio with the DLLs and namespaces of the Windows 8 APIS 4. [C++] Use a variable to keep a reference to the object and the ID (GetMethodID) of the method that will handle the event
  24. 24. 24 Using JNI to access the sensors from Windows.Sensors 5. [C++] Initialize the sensor and delegate a C++ method to handle the event 6. [C++] Redirect the delegate method call to the Java method using the function CallVoidMethod with the following parameters: the Java Object, the method ID and it’s parameters 7. [Java] Handle the event! A lot of text? Please, show me the code!
  25. 25. 25 JNI Callback from C++ to Java public final class ShakenSensor { static { System.loadLibrary("ShakenLib"); } private ShakenListener listener; public ShakenSensor (ShakenListener listener) { this.listener = listener; } public native boolean registerObject(); public native boolean registerMethod(); private void shaken(long timestamp) { listener.shaken(timestamp); } } Load the C++ Library Define native methods private method to be called from C++
  26. 26. 26 JNI Callback from C++ to Java // Shaken.h JNIEXPORT jboolean JNICALL Java_sample_ShakenSensor_registerObject (JNIEnv *, jobject obj); JNIEXPORT jboolean JNICALL Java_sample_ShakenSensor_registerMethod (JNIEnv * env, jobject obj); The header file with mapped native JNI methods
  27. 27. 27 JNI Callback from C++ to Java // Shaken.cpp #include "Shaken.h" #include "jni.h" #include<iostream> #using <Windows.winmd> #using <Platform.winmd> using namespace::Windows::Devices::Sensors; JavaVM * currentJvm; jobject shakenSensorJObject; jmethodID shakenJMethod; // ShakenSensor.shaken(long) cpp file including: Windows Sensor Fusion API Java Native Interface header Shaken header Keep references of jobject, jmethodID, currentJvm
  28. 28. 28 JNI Callback from C++ to Java // Shaken.cpp …_ShakenSensor_registerObject (JNIEnv * env, jobject obj) { shakenSensorJObject = env->NewGlobalRef(obj); jclass shakenSensorClass = env->GetObjectClass(shakenSensorJObject); shakenJMethod = env->GetMethodID(shakenSensorClass, "shaken", "(J)V"); env->GetJavaVM(&currentJvm); … } Get a reference to ShakenSensor object from JNIEnv, then the jclass, then the shaken Java method
  29. 29. 29 JNI Callback from C++ to Java // Shaken.cpp void Shaken(Accelerometer^ sender, AccelerometerShakenEventArgs^ args){ invokeShakenOnJava(args->Timestamp.UniversalTime / 10000); } …_ShakenSensor_registerMethod (JNIEnv * env, jobject obj) { accelerometer->Shaken += ref new Windows::Foundation::TypedEventHandler<Accelerometer^,AccelerometerShakenEventArgs^>(&Shaken); … } registerMethod activates the Sensor and register events to Shaken C++ method Shaken method forwards data to Java
  30. 30. 30 JNI Callback from C++ to Java // Shaken.cpp void invokeShakenOnJava(jlong timest){ JNIEnv * jniEnvironment; int envStt = currentJvm->GetEnv((void **)&jniEnvironment, JNI_VERSION_1_6); // check the envStat == JNI_OK //and call currentJvm->AttachCurrentThread if necessary … // call the Java method on the ShakenSensor Java Object jniEnvironment->CallVoidMethod(shakenSensorJObject, shakenJMethod,timest); // always detach current thread currentJvm->DetachCurrentThread(); } Make sure JVM is attached to thread, then call the method shakenJMethod
  31. 31. 31 What about Linux? Touch works fine, but there aren’t clear APIs to read sensors. If you know how to do it, let’s work together!
  32. 32. 32 Want to know more about Intel Software? http://software.intel.com/en-us/
  33. 33. 33 Windows Community http://software.intel.com/en-us/windows
  34. 34. 34 www.javafxcommunity.com
  35. 35. 35
  36. 36. 36 • The PC experience is being reshaped • JavaFX + Touch = AWESOME • Using JNI to access the sensors can be LEGENDARY! Take aways
  37. 37. 37 Questions? (if yes, the answer is 42)
  38. 38. 38 Thanks a lot! Bruno Borges facebook.com/brunocborges @brunoborges Felipe Pedroso facebook.com/felipe.a.pedroso @felipeapedroso

×