【问题标题】:Java Applet + JNI + .so fileJava 小程序 + JNI + .so 文件
【发布时间】:2015-01-23 11:15:10
【问题描述】:

我实现了一个简单的 java Hello world 程序,它使用 JNI 访问原生 C 文件。我成功地实施了它。我已经执行了以下 URL 中提到的步骤。

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

我需要借助上述文件创建一个小程序。换句话说,我想将 Java Applet 与 JNI 一起使用。我已经尝试搜索它,但我得到了 windows .dll 文件而不是 .so 文件的所有解决方案。

谁能帮我解决这个问题?

【问题讨论】:

  • 如果你有一个 .so 文件我并不重要。您仍然以与 Java 相同的方式使用该库。
  • 谢谢迈克尔,不过我是 Java 新手。你能给我一些关于如何实现这一点的链接吗?

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


【解决方案1】:

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

注意:您应该将“.dll”文件替换为“.so”文件(以及文件路径操作系统相关格式)。

【讨论】:

  • 非常感谢。但是,小程序在浏览器上显示为空白。我检查了 java 控制台,但没有出现错误。
  • 问题已修复。我使用 System.out.println 在小程序中显示,但 System.out.println 在 java 控制台中而不是在浏览器中显示消息。为了在浏览器中显示消息,我使用了 Graphics 类的 drawString 方法。但是,还有最后一个问题,代码在我的机器上正常工作,但是当我在其他机器上使用 URL 时,它会引发错误。引起:java.lang.UnsatisfiedLinkError:无法加载库:/var/www/libHelloWorld.so。谁能帮我解决这个问题?
【解决方案2】:

这是我执行的代码和步骤-

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多