JavaFX – Storage
JavaFX has Storage API which provides functionality similar to read and write from flat file. The API is part of common profile and hence will work across various platforms/devices. The application is not required to be signed to use this API. Also the access of saved data is restricted with in the codebase of the application.
For Applet mode, click on above image
In above sample use PathTransition API to move the car along a path (road). User can create roads by dragging the mouse over the terrain. The path will be saved using storage API, so that it can be retrieved later. Try creating a new path, close the application and reload the application later, the path will be re-created.
The path elements can be represented in xml format as shown below.
|
Next we will create a Storage instance and open an OutputStream to this as shown below. The API is similar to FileOutputStream. The boolean in openOutputStream
is to specify overwrite
(opposite of append
in FileOutputStream
). Size of resource can be specified using resource.maxLength attribute.
|
This way we obtain the OutputStream to which we can write the data.
We can retrieve the data using openInputStream
which returns an instance of InputStream instance. The data can be read from this stream, similar to FileInputStream.
|
Once the InputStream is obtained we can use PullParser to parse the xml data and construct the path.
|
After re-creating the path we can use AnimationPath.createFromPath( <path> ) and PathTransition to move the car along the path. Please refer to previous post for more information on Animation.
Update:
I didn’t mention about storage.properties
, wasn’t sure whether its a documented feature. Anyway users are trying to find the secrets! Well.. there is no secret as such, you can de-compile the class files
Configuration file – storage.properties
– is under ~/.javafx/deployment/ in Unix and %HOME%/Sun/JavaFX/Deployment/ on Windows. User can enable/disable the storage using “storage.enabled” attribute by setting it to true/false. The limit can be configured using “storage.limit.domain”. This file will be empty by default.
Try it out and let me know feedback
Source:
var dzone_style = ‘2’;