Using JNI Produced Jar Files: java.lang.UnsatisfiedLinkError

Discussion in 'Java' started by clusardi2k@aol.com, Jun 15, 2012.

  1. Guest

    On Windows 7, I am trying to use the JNI (Java Native Interface) to invoke a C++ method from java NetBeans 7.1.2 (Java SE Development Kit 7u4 x86 32-bit).

    Background: I was given two dot jar files (produced using the NetBeans JNI process) to use in a project. The filenames of these two JNI produced filesbegin with "java".

    My simple project consists of another dot java file. I'm, basically, just converting a working C++ project to a java project.

    Below, I first import the JNI C++ class described via the associated jar file(s). The import information came from the JavaBeans "Projects" window listing above all the available JNI class names.

    import com.one.two.three.My_Class;
    //import com.six.seven.eight.*;

    Second, in a java program constructor, I invoke the following static method:

    My_Class.a_first_test();

    (I know the above method is static because the similar C++ program runs perfectly.)

    Problem Description: This java project compiles. But when I run the program, I receive the below error message.

    run:
    Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: com.one.two.three.four.five_init()V
    at com.one.two.three.four.five_init(Native Method)
    at com.one.two.three.four.<clinit>(four.java:4746)
    at com.one.two.three.My_Class.a_first_test(My_Class.java:51)
    at My_Prj.<init>(My_Project.java:28)
    at My_Prj$11.run(My_Project.java:585)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:701)
    at java.awt.EventQueue.access$000(EventQueue.java:102)
    at java.awt.EventQueue$3.run(EventQueue.java:662)
    at java.awt.EventQueue$3.run(EventQueue.java:660)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:671)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread..java:244)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread..java:151)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

    My employeer told me I should not make public identifier names etc, so (above) I have carefully renamed code identifiers.

    ------

    Here are the steps that I followed to try to fix the problem. These steps did not work!

    (0) FYI: The contents of the jar files match (viewed via command jar tf jar-file) what is displayed by NetBeans.

    (1) To gather information, I put the following line of code as the first line in the constructor:

    System.out.println(System.getProperty("java.library.path"));

    I ran this program. The line of code gave me paths to folders such as:

    C:\Program Files\Java\jdk1.7.0_04\bin;
    C:\Windows\Sun\Java\bin;
    C:\Windows\system32;
    C:\Windows;
    C:\Program Files\QuickTime\QTSystem\;
    C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;
    C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;
    C:\Program Files\Microsoft SQL Server\90\Tools\binn\;.

    (2) Since there was also a beansbinding-1.2.1.jar (and associated dot dll file) file in my project, I looked for two dot dll files that correspond to the two dot jar files given to me. I found none that had "java" pre-appended to the filenames, but I found two without "java" pre-appended to the filenames. So, I just copied and renamed the two files that I found and put them in one of the folders produced from step 1.

    (3) Because of the beansbinding-1.2.1.jar file in my project, I copied my two dot jar files to the same folder. I did not rename any of the dot jar files.

    (4) I compiled and ran the project in NetBeans, but I received the exact same error message.

    ------

    Some References:

    Error message:
    http://stackoverflow.com/questions/...ue-0-java-lang-unsatisfiedlinkerror-no-jnotif

    Setting environment variable CLASSPATH required:
    http://www.webdeveloper.com/forum/archive/index.php/t-60643.html

    Thank you,
    , Jun 15, 2012
    #1
    1. Advertising

  2. Guest

    The following link contains a book describing a similar runtime error to mine. The book says I am missing a "DLL" (Dynamic Link Library)!

    http://java.sun.com/docs/books/jni/

    So, I have to try and determine where/how to get/build a DLL! Anybody have any ideas?

    My own large set of C++ routines has a dot jar file which allows me to compile and link my java project together. (I import the classes after adding the jar to the project.)

    Question: Can I create (with NetBeans) a DLL from my dot jar file, any suggestions.

    Referenced Book: The Java Native Interface Programmer’s Guide and Specification by Sheng Liang (published 1999)

    On Page 31 of the pdf:

    java.lang.UnsatisfiedLinkError: no HelloWorld in library path
    at java.lang.Runtime.loadLibrary(Runtime.java)
    at java.lang.System.loadLibrary(System.java)
    at HelloWorld.main(HelloWorld.java)

    Thanks for any help,
    , Jun 17, 2012
    #2
    1. Advertising

  3. Roedy Green Guest

    Roedy Green, Jun 17, 2012
    #3
  4. Guest

    On Sunday, June 17, 2012 2:02:00 AM UTC-4, Roedy Green wrote:
    > By far the easiest way to implement JNI is with Java Web Start. It
    > automatically selects the right DLL and it also installs it for you
    > where load/loadlibrary can find it.
    >
    > http://mindprod.com/jgloss/jni.html
    > http://mindprod.com/jgloss/javawebstart.html
    > --
    > Roedy Green Canadian Mind Products


    My requirements are to use NetBeans and a dot jar file.

    Thanks but still looking,
    , Jun 17, 2012
    #4
  5. Guest

    One alternative to using the dot jar file would be to throw the dot jar away, Thus, I could build a C++ class (in NetBeans per JNI) that uses a small subset of the class' mentioned in the large dot jar file, and just use JNI to communicate with a java NetBeans project!

    A second alternative would be to also not use the dot jar file, build a C++class (maybe in NetBeans or Visual Studio) that uses a small subset of theclass' mentioned in the dot jar file, have the C++ program write all the required data to a file, and use a java NetBeans project to read from the new file after first invoking the corresponding C++ project!
    , Jun 17, 2012
    #5
  6. Roedy Green Guest

    On Sat, 16 Jun 2012 23:16:46 -0700 (PDT), wrote,
    quoted or indirectly quoted someone who said :

    >My requirements are to use NetBeans and a dot jar file.


    You can can use NetBeans to develop JWS, and JWS is implemented with
    an ordinary .jar file. You may imagine that JWS is something other
    than Java. It is just an ordinary java jar plus a *.jnlp file. There
    are some JWS classes you can use to write an installer, but you don't
    have to use any of them.
    --
    Roedy Green Canadian Mind Products
    http://mindprod.com
    If you look in a computer programmer's freezer you will find all
    kinds of containers, but none of them labeled. They do the same thing
    creating files without labeling the encoding. You are just supposed to
    know. Ditto with the MIME type, the separator and comment delimiters and
    column names in CSV files. Ditto with the endian convention. Imagine how
    much more civilised life would have been if Martha Stewart were the first
    programmer.
    Roedy Green, Jun 18, 2012
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Lorin Hochstein
    Replies:
    2
    Views:
    1,789
    Lorin Hochstein
    Mar 5, 2004
  2. =?iso-8859-1?q?J=F6rgen_Persson?=

    JNI java.lang.UnsatisfiedLinkError with found DLL

    =?iso-8859-1?q?J=F6rgen_Persson?=, Apr 11, 2006, in forum: Java
    Replies:
    5
    Views:
    23,908
    craned
    Aug 2, 2012
  3. shivaraj
    Replies:
    8
    Views:
    34,997
    antan_sw
    Nov 9, 2009
  4. TsanChung
    Replies:
    0
    Views:
    1,436
    TsanChung
    Sep 4, 2008
  5. TsanChung
    Replies:
    8
    Views:
    3,077
    anandmadhab
    Sep 30, 2011
Loading...

Share This Page