使用vc++ 6.0制作dll,并在java程序中使用(转)
雖然JAVA的程式都必須在JAVA的虛擬機器上執行,但是我們可以在這部機器中打一個洞,讓JAVA程式可以直接溝通實際的機器
JNI是一種讓JAVA程式可以外接外部程式的一種機制,讓JAVA程式更具有擴充性,下面將示範一個簡單的範例,這個範例中說明JAVA程式如何與C語
言接軌,事實上昨天所談的Prolog就是利用這種方式使Java程式可以使用prolog,透過dll和native的方式來達成這項任務,經過這樣的
測試與實驗之後讓我不得不佩服java這個程式語言
你不需要擔心程式方面的問題,因為底下的程式架構都相當簡單,主要只是讓我們體驗一下
工具介紹:我將使用visual c++ 6.0來製作dll,使用java sdk 1.4來編譯我的java
java部分的實作
程式碼如下(HelloWorld.java):
class HelloWorld {
public native void displayHelloWorld();//左方的native型態是通知Java這個函數會使用到外部函數
static {
System.loadLibrary("hello");//左方的程式碼代表我要載入hello.dll的動態連結,hello.dll的製作我在稍後會做介紹
}
public static void main(String[] args) ...{
new HelloWorld().displayHelloWorld();
}
}
當你完成上述的程式之後,將這個程式存檔為''HelloWorld.java''先用''javac
HelloWorld.java''這個指令將它組譯成HelloWorld.class,然後使用''javah
HelloWorld''產生HelloWorld.h,在HelloWorld.h中我們知道我們要實作一個函數
Java_HelloWorld_displayHelloWorld(JNIEnv *, jobject); 接下來我將介紹如何完成這個函數
&
相关文档:
举例子说明一切。
JAVA_HOME: C:\j2sdk1.4.2_13
Path: C:\j2sdk1.4.2_13\bin;
Classpath:.;JAVA_HOME\lib\tools.jar ; JAVA_HOME\lib\dt.jar;
&n ......
import java.awt.*;
import javax.swing.*;
import java.util.Date;
import java.awt.*;
class Time extends JFrame implements Runnable{//实现接口
Thread clockThread;
JLabel jLabel=new JLabel();
public Time()
{
Container con=this.getContentPane() ......
1.计算某一月份的最大天数
Calendar time=Calendar.getInstance();
time.clear();
time.set(Calendar.YEAR,year);
time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0
int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数 ......
1、FACTORY(工厂模式)
2、BUILDER(建造模式)
3、FACTORY METHOD(工厂方法模式)
4、PROTOTYPE(原始模型模式)
5、SINGLETON(单例模式)
6、ADAPTER(适配器模式)
7、BRIDGE(桥梁模式)
8、COMPOSITE(合成模式)
9、DECORATOR(装饰模式)
10、FACADE(门面模式)
11、FLYWEIGHT(享元模式) ......