This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages)
Java AWT Native Interface (jawt) is an interface for the Java programming language that enables rendering libraries compiled to native code to draw directly to a Java Abstract Window Toolkit (AWT)
Canvas object drawing surface.
The Java Native Interface (JNI) allows developers to add platform-dependent functionality to Java applications. The JNI enables developers to add time-critical operations like mathematical calculations and 3D rendering. Previously, native 3D rendering was technically challenging because the native code didn't have access to the graphic context. The AWT Native Interface is designed to give developers access to an AWT
Canvas for direct drawing with native code. In fact, the Java 3D API extension to the standard Java 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 the Java 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 the J2SE 1.3 ("Kestrel") version.
AWT Native Interface stepsEdit
This article contains instructions, advice, or how-to content. (June 2012)
A complete walkthrough example of this technology is available on Wikibooks (see link below).
Create a Java applicationEdit
See the Java Native Interface article for an explanation of the
native keyword and the
loadLibrary() method. A
paint() method will be simply invoked when the AWT event dispatching thread "repaints" the screen.
Create a C++ header fileEdit
Implement the C++ native codeEdit
Type this in a file named "NativeSideCanvas.cpp" and compile into a library. See Java Native Interface (JNI) for a more complete explanation. (For Solaris code and other operating systems see links below.)
Run the programEdit
One should run the file as usual. One should then see a window with, for example, a rectangle drawn in it. (See Java Native Interface for complete instructions.)
Note: One can notice 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.)
One can paint as if it is a native application. In Windows, the JVM will pass a HWND and other window information to the native application so that the application will "know" where to draw. It could use GDI to draw a Rectangle. The window information the native side needs will be in a
JAWT_Win32DrawingSurfaceInfo structure (depending on Operating System) which can be retrieved with this line:
dsi_win = (JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo;