/********************************************************************************* CPUTest.java JNI 接口對(duì)象 1999 April 20 by 王森 **********************************************************************************/ //加入my.cpu這個(gè)package之中 package my.cpu ;
public class CPUTest {
/*以下定義每種處理器所代表的常數(shù)*/ static public final int i386 = 0 ; //不支持CPUID的處理器(可辨識(shí)) static public final int Pentium = 1 ; //最早期的Pentium處理器(可辨識(shí)) static public final int Pentium_M = 2 ; //Pentium with MMX 處理器(可辨識(shí)) static public final int Pentium_2 = 3 ; //Pentium II 處理器(可辨識(shí)) static public final int Pentium_3 = 4 ; //Pentium III處理器(可辨識(shí)) static public final int Pentium_P = 5 ; //Pentium Pro 處理器(可辨識(shí)) static public final int K6 = 11 ; //同Pentium with MMX static public final int K6_2 = 12 ; //K6-2處理器((可辨識(shí)) static public final int K6_3 = 13 ; //同K6-2
/*以下定義所有會(huì)藉由JNI來(lái)叫用的函式*/
//測(cè)試CPU是否支持CPUID指令,假如支持則傳回true,否則傳回false public native boolean CheckCPUID() ; ^^^^^^ 注重,所有的JNI函式都必須在函式宣告里加上native這個(gè)修飾字 //辨識(shí)處理器是否支持MMX,假如支持則傳回true,否則傳回false public native boolean CheckMMX() ;
//辨識(shí)處理器是否支持Stream SIMD Extension(即KNI),假如支持則傳回true,否則傳回false public native boolean CheckSSIMD() ;
//辨識(shí)處理器是否支持AMD 3DNow,假如支持則傳回true,否則傳回false public native boolean Check3DNOW() ;
//辨識(shí)CPU的等級(jí),并傳回一個(gè)整數(shù)代表CPU的等級(jí) public native int CheckCPUTYPE() ;
//印出CPU的相關(guān)信息 public native void PrintCPUInfo() ; note:使用此函數(shù)之前,請(qǐng)先呼叫前面的所有函式,因?yàn)榍懊娴暮?除了傳回真?zhèn)沃?也會(huì)設(shè)定DLL文件之中的全域變量而PrintCPUInfo會(huì)利用這些全域變量來(lái)做判定的工作.
class test { /*以下定義每種處理器所代表的常數(shù)*/ static public final int i386 = 0 ; //不支持CPUID的處理器(可辨識(shí)) static public final int Pentium = 1 ; //最早期的Pentium處理器(可辨識(shí)) static public final int Pentium_M = 2 ; //Pentium with MMX 處理器(可辨識(shí)) static public final int Pentium_2 = 3 ; //Pentium II 處理器(可辨識(shí)) static public final int Pentium_3 = 4 ; //Pentium III處理器(可辨識(shí)) static public final int Pentium_P = 5 ; //Pentium Pro 處理器(可辨識(shí)) static public final int K6 = 11 ; //同Pentium with MMX static public final int K6_2 = 12 ; //K6-2處理器((可辨識(shí)) static public final int K6_3 = 13 ; //同K6-2
//主程序開(kāi)始 public static void main(String args[]) { boolean temp ; //取得JNI接口對(duì)象 CPUTest my = new CPUTest() ;
在命令列下打入javac test.java,就可以產(chǎn)生test.class這個(gè)檔案.接者請(qǐng)打java test來(lái)執(zhí)行程序,不過(guò)首先您會(huì)先碰到下面的錯(cuò)誤訊息: C:jdk1.2my>java test Exception in thread "main" java.lang.UnsatisfiedLinkError: no CPUTestDll in java .library.path at java.lang.ClassLoader.loadLibrary(Compiled Code) at java.lang.Runtime.loadLibrary0(Runtime.java:470) at java.lang.System.loadLibrary(System.java:745) at my.cpu.CPUTest.<clinit>(CPUTest.java:48)
這是什幺原因呢? 原來(lái)是因?yàn)镴ava Virtual Machine找不到CPUTestDll.dll,所以產(chǎn)生了執(zhí)行時(shí)期例外.解決這個(gè)問(wèn)題的方法有兩種: 第一種就是把CPUTestDll.dll拷貝到跟test.class同一個(gè)目錄下. 第二種方法就是下指令java -Djava.library.path=<DLL所在位置> test,例如: java -Djava.library.path=c:jdk1.2mydll test代表CPUTestDll.dll是放置在c:jdk1.2mydll底下. 不論您用哪種方法,都可以看到下面的輸出結(jié)果: C:jdk1.2my>java test CPUID support MMX support SSIMD not support 3DNOW not support
---------Starting Java code Print-------- Pentium II
---------Starting native code Print-------- ... Verify Some Processor Information ... The Capacity of your Processor : Support Intel MMX Technology No Intel Streaming SIMD Extensions Support No AMD 3D!NOW Technology Support CPU Type :Intel Pentium II Processor ... Verify End ...