Skip to content
This repository

Java Native Access

Merge pull request #321 from headcr4sh/patch-1

Add syntax highlighting to C- and Java code

Oooh, pretty!
latest commit 87c582ce23
Timothy Wall authored April 20, 2014
Octocat-spinner-32 contrib Changed Advapi32Test.testAccessCheck to work on non-US-English system… January 22, 2014
Octocat-spinner-32 dist Release 4.1.0 to Maven Central. March 06, 2014
Octocat-spinner-32 lib Add and bundle support for AArch64 April 04, 2014
Octocat-spinner-32 native enable AIX build, update natives March 18, 2014
Octocat-spinner-32 src Exception chaining for com.sun.jna.Structure April 09, 2014
Octocat-spinner-32 test Use getCanonicalPath instead of getAbsolutePath for these two tests February 26, 2014
Octocat-spinner-32 www Add syntax highlighting to C- and Java code April 20, 2014
Octocat-spinner-32 .classpath Removed dependency on JNA_LIB and contrib paths. October 04, 2013
Octocat-spinner-32 .gitignore Release 4.1.0 to Maven Central. March 06, 2014
Octocat-spinner-32 .project fix file permissions May 06, 2013
Octocat-spinner-32 ASL2.0 add ASL May 10, 2013
Octocat-spinner-32 Added an entry in the changelog for #290 April 09, 2014
Octocat-spinner-32 LGPL2.1 add ASL May 10, 2013
Octocat-spinner-32 LICENSE bump versions May 21, 2013
Octocat-spinner-32 LICENSE.ASL add license info files June 08, 2013
Octocat-spinner-32 LICENSE.LGPL add license info files June 08, 2013
Octocat-spinner-32 OTHERS fix file permissions May 06, 2013
Octocat-spinner-32 Fixed link to JavaDoc. March 31, 2014
Octocat-spinner-32 TODO ensure native bits get built for 'native' target and for tests July 03, 2013
Octocat-spinner-32 build.xml Add and bundle support for AArch64 April 04, 2014
Octocat-spinner-32 jna.keystore move jnalib up to top level June 22, 2011
Octocat-spinner-32 pom-jna-platform.xml Release 4.1.0 to Maven Central. March 06, 2014
Octocat-spinner-32 pom-jna.xml Release 4.1.0 to Maven Central. March 06, 2014
Octocat-spinner-32 w32ce-test.lnk re-enable WCE failing tests, fixes to allow proper phoneME operation … November 09, 2011

Java Native Access - JNA

Java Native Access (JNA)

The definitive JNA reference (including an overview and usage details) is in the JavaDoc. Please read the overview. Questions, comments, or exploratory conversations should begin on the mailing list, although you may find it easier to find answers to already-solved problems on StackOverflow.

JNA provides Java programs easy access to native shared libraries without writing anything but Java code - no JNI or native code is required. This functionality is comparable to Windows' Platform/Invoke and Python's ctypes.

JNA allows you to call directly into native functions using natural Java method invocation. The Java call looks just like the call does in native code. Most calls require no special handling or configuration; no boilerplate or generated code is required.

JNA uses a small JNI library stub to dynamically invoke native code. The developer uses a Java interface to describe functions and structures in the target native library. This makes it quite easy to take advantage of native platform features without incurring the high overhead of configuring and building JNI code for multiple platforms.

While significant attention has been paid to performance, correctness and ease of use take priority.

In addition, JNA includes a platform library with many native functions already mapped as well as a set of utility interfaces that simplify native access.

Projects Using JNA

JNA is a mature library with dozens of contributors and hundreds of commercial and non-commercial projects that use it. If you're using JNA, feel free to tell us about it. Include some details about your company, project name, purpose and size and tell us how you use the library.


Version 4.1.0


  • Automatic mapping from Java to native functions, with simple mappings for all primitive data types
  • Runs on most platforms which support Java
  • Automatic conversion between C and Java strings, with customizable encoding/decoding
  • Structure and Union arguments/return values, by reference and by value
  • Function Pointers, (callbacks from native code to Java) as arguments and/or members of a struct
  • Auto-generated Java proxies for native function pointers
  • By-reference (pointer-to-type) arguments
  • Java array and NIO Buffer arguments (primitive types and pointers) as pointer-to-buffer
  • Nested structures and arrays
  • Wide (wchar_t-based) strings
  • Native long support (32- or 64-bit as appropriate)
  • Demo applications/examples
  • Supported on 1.4 or later JVMs, including JavaME (earlier VMs may work with stubbed NIO support)
  • Customizable marshalling/unmarshalling (argument and return value conversions)
  • Customizable mapping from Java method to native function name, and customizable invocation to simulate C preprocessor function macros
  • Support for automatic Windows ASCII/UNICODE function mappings
  • Varargs support
  • Type-safety for native pointers
  • VM crash protection (optional)
  • Optimized direct mapping for high-performance applications.
  • COM support for early and late binding.
  • COM/Typelib java code generator.

Community and Support

All questions should be posted to the jna-users Google group. Issues can be submitted here on Github.

When posting to the mailing list, please include the following:

  • What OS/CPU/architecture you're using (e.g. Windows 7 64-bit)
  • Reference to your native interface definitions (i.e. C headers), if available
  • The JNA mapping you're trying to use
  • VM crash logs, if any
  • Example native usage, and your attempted Java usage

It's nearly impossible to indicate proper Java usage when there's no native reference to work from.

For commercial support, please contact twalljava [at] java [dot] net.

Using the Library

Primary Documentation (JavaDoc)

The definitive JNA reference is in the JavaDoc.



You're encouraged to contribute to JNA. Fork the code from and submit pull requests.

For more information on setting up a development environment see Contributing to JNA.

If you are interested in paid support, feel free to say so on the jna-users mailing list. Most simple questions will be answered on the list, but more complicated work, new features or target platforms can be negotiated with any of the JNA developers (this is how several of JNA's features came into being). You may even encounter other users with the same need and be able to cost share the new development.


This library is licensed under the LGPL, version 2.1 or later, and (from version 4.0 onward) the Apache Software License, version 2.0. Commercial license arrangements are negotiable.

NOTE: Oracle is not sponsoring this project, even though the package name (com.sun.jna) might imply otherwise.

Something went wrong with that request. Please try again.