- Java AWT Native Interface
Java AWT Native Interface is an interface for the Java programming language that enables
render ing libraries compiled tonative code to draw directly to a JavaAbstract Window Toolkit (AWT) Javadoc:SE|java/awt|Canvas object drawing surface.The
Java Native Interface (JNI) enabled developers to add platform-dependent functionality to Java applications. The JNI enables developers to add time-critical operations like mathematical calculations and3D rendering . Previously, native 3D rendering was a problem because the native code didn't have access to the graphic context. The AWT Native Interface is designed to give developers access to an AWTCanvas
for direct drawing by native code. In fact, theJava 3D API extension to the standardJava SE JDK relies heavily on the AWT Native Interface to render 3D objects in Java. The AWT Native Interface is very similar to the JNI, and, the steps are, in fact, the same as those of the JNI. See theJava Native Interface article for an explanation of the JNI techniques employed by the AWT Native Interface.The AWT Native Interface was added to the
Java platform with theJ2SE 1.3 ("Kestrel") version.AWT Native Interface example walkthrough
Create the Java application
Type in this in a .java file named JavaSideCanvas and compile:See the
Java Native Interface article for an explanation of thenative
keyword and theloadLibrary()
method. Thepaint()
method will be simply invoked when the AWTevent dispatching thread "repaints" the screen.Create the C++ header file
Create the
C++ header file as usual (SeeJava Native Interface for more complete explanation.)The header file looks like this now:
Implement the C++ native code
Type this in a file named "NativeSideCanvas.cpp" and compile into a library. See
Java Native Interface for a more complete explanation.(Microsoft) Don't forget to link this with "jawt.lib" and "gdi32.lib". These libraries are needed because the code draws a rectangle using routines from these libraries.
Microsoft C++:(For Solaris code and other operating systems see links below.)
Run the example
Run the file as usual. (See
Java Native Interface for complete instructions.)It's interesting to note that the AWT Native Interface requires the "jawt.dll" (or "jawt.so") to run with the application, so the easiest way to do that is copying the "jawt.dll" (should be in the .../jre/bin
file path of the JDK's installation path.)You should see a window with a rectangle drawn in it.
Congratulations! You have made your first AWT Native Application!
Native painting
As you can see, you can paint as if it is a native application. In Windows, the JVM will pass a HWND and other window information to your native application so that your application will "know" where to draw. In this example, it uses GDI to draw a Rectangle. The window information your native side need will be in a
JAWT_Win32DrawingSurfaceInfo
structure (depending onOperating System ) which can be retrieved with this line:dsi_win = (JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo;
dsi_win has the information, look in the "jni.h" file for details.
See also
*
Java Native Interface
*Abstract Window Toolkit
*Event dispatching thread External links
* [http://java.sun.com/j2se/1.5.0/docs/guide/awt/1.3/AWT_Native_Interface.html The AWT Native Interface]
Wikimedia Foundation. 2010.