JNI is a standard way to make native calls from your java applications. this flexibility lets you give freedom from writing code for some native functionalities which your java application wants to use. you leave the native functionality on the native platform underneath your java layer and you concentrate on your application code.
its a small set of programing interfaces, but has a little steep curve to learn, especially getting used to the datatypes made available to you by the interfaces and passing arguments between your java application and the native (c++ dll for example). yes, you can even load up java objects in your c++ code and access its methods. you are provided with an environment pointer that lets you access the vm under which this call was made.
now that is fun; to create & load up java objects in your c++ code and if needed return it back to your java application.
stay tuned for some sample code making native calls from java.