最近在做一個客戶端監控的功能需要提取用戶電腦的CPU編號和網卡的編號采集用戶的登陸數據據我所知道直接通過Java來調用操作系統的信息是非常困難的事情(我好像沒有發現JavaAPI提供了這個功能)那這樣的話只能通過JNI訪問系統的信息了不過有個SWT擴展的插件orgeclipseswtextension封裝了調用DLL的JNI方法主要是負責底層操作系統的方法不過可能會對程序的跨平台性有點的影響目前只能使用於Windows操作系統使用方法很簡單接下來請看
我們可以從 上下載這個插件直接搜索 swt extension 就可以搜到新建一個工程比如名稱叫orgvwpoloextendexample這裡要新建成一個插件項目如果新建成個簡單的Java工程的時候會出現個找不到類的異常javalangNoClassDefFoundError org/eclipse/swt/internal/win/OS項目新建好了後我們可以寫個類來測試一下我寫的測試類為
import orgeclipseswtinternalextensionExtension;
/**
* 獲得操作系統的信息
* @author 劉堯興
* <p></p>
*/
public class GetOSInfoApp {
public static void main(String[] args) {
Systemoutprintln(計算機名稱: +ExtensionGetComputerName());
Systemoutprintln(系統登陸帳號: +ExtensionGetUserName());
Systemoutprintln(系統CPU編號: + ExtensionGetCPUID());
Systemoutprintln(系統 MAC編號: + ExtensionGetMACID());
}
}
這個類功能相當的簡單我的項目的文件結構為
注意要使程序順利運行必須要導入 swtextensionwindll 這個文件由於文件下載下來後有三個DLL文件還有兩個是swtgdipwindll和swtwindll如果將他們全部導入進來結果會拋出個這樣的異常
Exception in thread main javalangUnsatisfiedLinkError: orgeclipseswtinternalCPTR_sizeof()I
at orgeclipseswtinternalCPTR_sizeof(Native Method)
at orgeclipseswtinternalC<clinit>(Cjava:)
at orgvwpoloextendexampleGetSystemInfoAppmain(GetSystemInfoAppjava:)
這個異常出現的原因是找不到DLL文件或者是多個DLL文件沖突所造成的
去掉其他的DLL文件只要導入swt
extension
win
dll
運行
這是控制台打印的結果
計算機名稱: THINKPAD
系統登陸帳號: vwpolo
系統CPU編號: BFEBFBFF
F
系統 MAC編號: [I@
c
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26173.html