/********************************************************************************* CPUTest.java JNI 接口对象 1999 April 20 by 王森 **********************************************************************************/ //加入my.cpu这个package之中 package my.cpu ;
public class CPUTest {
/*以下定义每种处理器所代表的常数*/ static public final int i386 = 0 ; //不支持CPUID的处理器(可辨识) static public final int Pentium = 1 ; //最早期的Pentium处理器(可辨识) static public final int Pentium_M = 2 ; //Pentium with MMX 处理器(可辨识) static public final int Pentium_2 = 3 ; //Pentium II 处理器(可辨识) static public final int Pentium_3 = 4 ; //Pentium III处理器(可辨识) static public final int Pentium_P = 5 ; //Pentium Pro 处理器(可辨识) static public final int K6 = 11 ; //同Pentium with MMX static public final int K6_2 = 12 ; //K6-2处理器((可辨识) static public final int K6_3 = 13 ; //同K6-2
/*以下定义所有会藉由JNI来叫用的函式*/
//测试CPU是否支持CPUID指令,假如支持则传回true,否则传回false public native boolean CheckCPUID() ; ^^^^^^ 注重,所有的JNI函式都必须在函式宣告里加上native这个修饰字 //辨识处理器是否支持MMX,假如支持则传回true,否则传回false public native boolean CheckMMX() ;
//辨识处理器是否支持Stream SIMD Extension(即KNI),假如支持则传回true,否则传回false public native boolean CheckSSIMD() ;
//辨识处理器是否支持AMD 3DNow,假如支持则传回true,否则传回false public native boolean Check3DNOW() ;
//辨识CPU的等级,并传回一个整数代表CPU的等级 public native int CheckCPUTYPE() ;
//印出CPU的相关信息 public native void PrintCPUInfo() ; note:使用此函数之前,请先呼叫前面的所有函式,因为前面的函式,除了传回真伪之外,也会设定DLL文件之中的全域变量而PrintCPUInfo会利用这些全域变量来做判定的工作.
class test { /*以下定义每种处理器所代表的常数*/ static public final int i386 = 0 ; //不支持CPUID的处理器(可辨识) static public final int Pentium = 1 ; //最早期的Pentium处理器(可辨识) static public final int Pentium_M = 2 ; //Pentium with MMX 处理器(可辨识) static public final int Pentium_2 = 3 ; //Pentium II 处理器(可辨识) static public final int Pentium_3 = 4 ; //Pentium III处理器(可辨识) static public final int Pentium_P = 5 ; //Pentium Pro 处理器(可辨识) static public final int K6 = 11 ; //同Pentium with MMX static public final int K6_2 = 12 ; //K6-2处理器((可辨识) static public final int K6_3 = 13 ; //同K6-2
//主程序开始 public static void main(String args[]) { boolean temp ; //取得JNI接口对象 CPUTest my = new CPUTest() ;
在命令列下打入javac test.java,就可以产生test.class这个档案.接者请打java test来执行程序,不过首先您会先碰到下面的错误讯息: 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)
这是什幺原因呢? 原来是因为Java Virtual Machine找不到CPUTestDll.dll,所以产生了执行时期例外.解决这个问题的方法有两种: 第一种就是把CPUTestDll.dll拷贝到跟test.class同一个目录下. 第二种方法就是下指令java -Djava.library.path=<DLL所在位置> test,例如: java -Djava.library.path=c:jdk1.2mydll test代表CPUTestDll.dll是放置在c:jdk1.2mydll底下. 不论您用哪种方法,都可以看到下面的输出结果: 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 ...