Java Applet + JNI + .so文件

时间:2015-01-23 11:15:10

标签: java applet java-native-interface shared-libraries

我实现了一个简单的java Hello world程序,它使用JNI来访问本机C文件。我成功地实现了它。我已执行以下网址中提到的步骤。

http://www.java-tips.org/other-api-tips/jni/simple-example-of-using-the-java-native-interface.html

现在,我有这些文件 -

  1. 的HelloWorld.class
  2. HelloWorld.h
  3. HelloWorld.so
  4. 我需要在上述文件的帮助下创建一个applet。换句话说,我想将Java Applet与JNI一起使用。我试过搜索它,但我得到了windows .dll文件的所有解决方案,而不是.so文件。

    有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

请看一下这个帖子。它似乎涵盖了你的问题: Calling a DLL from an Applet via JNI

注意:您应该只更换' .dll'您的' .so'提交的文件文件(和文件路径OS相对格式化)。

答案 1 :(得分:0)

以下是我执行的代码和步骤 -

HelloWorld.java

import javax.swing.JApplet; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.applet.*;

public class HelloWorld extends Applet{
        public native String print();

        static{
                System.load("/var/www/libHelloWorld.so");
        }

        public void paint(Graphics g){
                HelloWorld hw = new HelloWorld();
                g.drawString("Message: " + hw.print(), 5, 15);
        }

}

我编译了java文件并使用java jni创建了HelloWorld.h文件。

然后创建了一个C文件并将其编译为生成的libHelloWorld.so文件。

Jar文件包含HelloWorld.class和libHelloWorld.so文件。

jar文件已签名,HTML代码如下:

<HTML>
<HEAD>
</HEAD>
<BODY>
<div style="border:1px solid black;" >
<APPLET CODE="HelloWorld.class"  ARCHIVE="HelloWorld.jar" WIDTH="800" HEIGHT="800">
</APPLET>
</div>
</BODY>
</HTML>

当我在我的机器上安装的浏览器中打开html时,上述工作正常。

但是,当我尝试从其他计算机访问它时,会抛出错误。

Caused by: java.lang.UnsatisfiedLinkError: Can't load library: /var/www/libHelloWorld.so

我试过搜索解决方案,但没有发现任何帮助。