Java applet & native method (JNI) -- Snippets

来源:互联网 发布:java包依赖 编辑:程序博客网 时间:2024/05/22 06:08

1. Java applet

>javac -d . HelloApplet.java

>appletviewer HelloApplet.html 

 或者直接用IE打开

// HelloApplet.java
public class HelloApplet extends java.applet.Applet
{
    
public void paint(java.awt.Graphics g)
    {
        g.drawString(
"Hello Applet!"5025);
    }
    
    
public static void main(String[] args)
    {
        System.out.println(
"Hello" + " " + "World" + "!");
    }
}
<!-- HelloApplet.html -->
<html>
<head>
<title>Hello Applet</title>
</head>

<body>
Here is the "Hello Applet":
<applet code="HelloApplet.class" width="150" height="25"></applet>    
</body>
</html>

 

2. native method

 1) Java文件, HelloJni.java, 并编译

>javac -d . HelloJni.java

package tony.test;

public class HelloJni
{
    
private static final String jniLib = "HelloJni";
    
public native int add(int i1, int i2);

    
static
    {
        System.loadLibrary(jniLib);
    }

    
public static void main(String[] args)
    {
        
int i1 = 100;
        
int i2 = 200;
        System.out.println(
new HelloJni().add(i1, i2));
    }
}

 

2) 生成C++ (Native) 文件tony_test_HelloJni.h

>javah -jni tony.test.HelloJni

3) 编写HelloJni.cpp


#include "tony_test_HelloJni.h"

JNIEXPORT jint JNICALL Java_tony_test_HelloJni_add(JNIEnv
* env, jobject obj, jint i1, jint i2)
{
    
int i = i1 + i2;
    
return i;
}

4) 编译生成dll

Windows:

>cl -I%JAVA_HOME%/include -I%JAVA_HOME%/include/win32 -LD HelloJni.cpp -FeHelloJni.dll

Solaris:

#cc -G -I/usr/local/java/include -I/usr/local/java/include/solaris HelloJni.cpp / -o libHelloJni.so

-G选项指生成动态链接库.

这里需要说明的是, 在windows下和solaris动态链接库的名称分别为HelloJni.dll和libHelloJni.so.

在java.lang.System下有三个与加载动态链接库有关的函数: load, mapLibraryName, loadLibrary.

load参数为动态链接库绝对路径, 如System.load("F://codes//jnicode//HelloJni.dll");

mapLibraryName会根据操作系统和参数动态链接库名来返回对应的动态链接库文件名, 比如, System.mapLibraryName("HelloJni"); 在Windows下返回HelloJni.dll, 在Solaris下返回libHelloJni.so;

loadLibrary参数为动态链接库名, 如System.load("HelloJni"); 对于不同的系统它会加载对应的库(windows下加载HelloJni.dll, Solaris下加载libHelloJni.so), 而不需改Java代码.

5) 运行Java程序

>java tony.test.HelloJni

两个不错的参考:

Jni中C++和Java的参数传递

[JNI] Eclipse直接完成JAVA调用C/C++ (Eclipse上使用CDT结合MinGW)

推荐一个开源项目: Jace. 极大地方便JNI编程.

http://sourceforge.net/projects/jace/

jace.1.1rc1_05

"Jace is a toolkit designed to make it easy to write JNI-based programs. Jace consists of a C++ runtime library, and a set of tools written in Java. Because Jace is not a framework, it leaves all possible options open to the developer.

Jace's C++ runtime library provides an easy to use API that allows user to manipulate Java objects as if they were C++ objects. Behind the scenes, the runtime library automatically manages the lifetimes of Java references, the mapping of Java exceptions to C++ exceptions, and the binding of C++ threads to the JVM.

Jace's Java tools can automatically generate C++ Proxy classes and C++ Peer classes from Java classes. This means that you can easily access any Java object or implement any Java native function from your C++ code. "

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电视锁屏失败了怎么办? 海尔户户通位置信息改变怎么办 户户通e02智能卡通信失败怎么办 户户通e04未授权怎么办 查环保没生意做怎么办 怎么办扬大牛奶直销点 军人在退伍的时候带病怎么办 个税密码忘记了怎么办 地税网上申报密码忘记了怎么办 国税银行缴款凭证丢失了怎么办 税务局让法人缴税法人不缴会怎么办 税盘忘记清卡怎么办 7年没申报地税怎么办 已报税忘了清卡怎么办 国税报税密码忘了怎么办 有一个月忘报税了怎么办 地税报税密码忘了怎么办 电子税务账号忘记了怎么办 国税ukey密码忘了怎么办 电子税务局显示版本低怎么办 电子税务局2.0不显示打印怎么办 青海建筑三级资质初申是怎么办 欠钱败诉没钱还怎么办 学校退款卡丢了怎么办 学校发的卡掉了怎么办 汇款回执单丢了怎么办 大学交学费的卡丢了怎么办 交学费的银行卡丢了怎么办 学校补助卡丢了怎么办 学校交学费的卡丢了怎么办 采购零星材料无发票怎么办 租房合同弄丢了怎么办 买房的合同丢了怎么办 押金的收据丢了怎么办 房东的合同掉了怎么办 个人档案里单位没有放合同怎么办 签的合同掉了怎么办 一方合同弄丢了怎么办 合同丢了怎么办如何补 签了定金合同对方违约怎么办 医学出生证明丢了怎么办