<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    好好生活,努力工作,天天向上!

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      46 Posts :: 1 Stories :: 178 Comments :: 0 Trackbacks

        最近在做一個客戶端監控的功能,需要提取用戶電腦的CPU編號和網卡的編號,采集用戶的登陸數據,據我所知道直接通過Java來調用操作系統的信息是非常困難的事情(我好像沒有發現JavaAPI提供了這個功能),那這樣的話只能通過JNI訪問系統的信息了,不過有個SWT擴展的插件org.eclipse.swt.extension封裝了調用DLL的JNI方法,主要是負責底層操作系統的方法,不過可能會對程序的跨平臺性有點的影響,目前只能使用于Windows操作系統,使用方法很簡單,接下來請看:
     
       我們可以從http://www.sourceforge.net 上下載這個插件,直接搜索 swt extension 就可以搜到,新建一個工程,比如名稱叫org.vwpolo.extend.example,這里要新建成一個插件項目,如果新建成個簡單的Java工程的時候會出現個找不到類的異常java.lang.NoClassDefFoundError: org/eclipse/swt/internal/win32/OS,項目新建好了后我們可以寫個類來測試一下,我寫的測試類為:

     1 import org.eclipse.swt.internal.extension.Extension;
     2 
     3 /**
     4  * 獲得操作系統的信息  。 
     5  * @author 劉堯興
     6  * <p>2009-6-3</p>
     7  */
     8 public class GetOSInfoApp {
     9   public static void main(String[] args) {
    10     System.out.println("計算機名稱: "+Extension.GetComputerName());
    11     System.out.println("系統登陸帳號: "+Extension.GetUserName());
    12     System.out.println("系統CPU編號: " + Extension.GetCPUID());
    13     System.out.println("系統 MAC編號: " + getMacId());
    14   }

            public static String getMacID() {
              int[] macs = Extension.GetMACAddress(0);
              StringBuffer stringBuffer = new StringBuffer();
             for (int i = 0; i < macs.length; i++) {
                stringBuffer.append(getHexString(macs[i], 2).toUpperCase());
                if (i != macs.length - 1)
                stringBuffer.append("-");
            }
            return stringBuffer.toString();
    15 }
       /**
        * 將十進制轉換成十六進制  。
        * @author 劉堯興
        * @param value
        * @param length
        * @return String
       */
       public static String getHexString(int value, int length) {
           String valueStr = Integer.toHexString(value);
           if(valueStr.length() == length)
             return valueStr;
           if(valueStr.length() > length)
             return valueStr.substring(0, length);
           valueStr = "0000"+valueStr;
           return valueStr.substring(valueStr.length()-length);
         }
    16 

    這個類功能相當的簡單,我的項目的文件結構為


     注意要使程序順利運行,必須要導入 swt-extension-win32.dll 這個文件,由于文件下載下來后有三個DLL文件,還有兩個是swt-gdip-win32.dll和swt-win32.dll,如果將他們全部導入進來結果會拋出個這樣的異常
    Exception in thread "main" java.lang.UnsatisfiedLinkError: org.eclipse.swt.internal.C.PTR_sizeof()I
           at org.eclipse.swt.internal.C.PTR_sizeof(Native Method)
           at org.eclipse.swt.internal.C.
    <clinit>(C.java:24)
           at org.vwpolo.extend.example.GetSystemInfoApp.main(GetSystemInfoApp.java:
    6)
    這個異常出現的原因是找不到DLL文件或者是多個DLL文件沖突所造成的,去掉其他的DLL文件只要導入swt-extension-win32.dll, 運行,這是控制臺打印的結果:
    計算機名稱: THINKPAD
    系統登陸帳號: vwpolo
    系統CPU編號: BFEBFBFF00000F64
    -0000000000000000
    系統 MAC編號: 00-01-6C-44-C5-??
    不過值得注意的是用這個辦法在配置雙網卡的電腦上會運行不正常,我這里就碰到獲取不到網卡的情況,如果你是使用JDK 6.0的話,現在可以通過這種方式獲得網卡信息:
      /**
       * JDK1.6新特性獲取網卡MAC地址
       * 
    @return String
       
    */
      
    private static String getMac() {
        
    try {
          Enumeration
    <NetworkInterface> el = NetworkInterface.getNetworkInterfaces();
          
    while (el.hasMoreElements()) {
            
    byte[] mac = el.nextElement().getHardwareAddress();
            
    if (mac == null)
              
    continue;

            StringBuilder builder 
    = new StringBuilder();
            
    for (byte b : mac) {
              builder.append(hexByte(b));
              builder.append(
    "-");
            }
            builder.deleteCharAt(builder.length() 
    - 1);
            
    return builder.toString();

          }
        }
        
    catch (Exception exception) {
          exception.printStackTrace();
        }
        
    return null;
      }
    posted on 2009-06-03 09:52 VWPOLO 閱讀(2300) 評論(4)  編輯  收藏 所屬分類: Java 技術SWT JFace

    Feedback

    # re: 使用SWT擴展調用操作系統的信息 2009-06-03 17:08 Always BaNg.
    其實swt extension 32的作者就在blogjava上

    cnfree.blogjava.net  回復  更多評論
      

    # re: 使用SWT擴展調用操作系統的信息 2009-06-04 10:08 VWPOLO
    @Always BaNg.
    呵呵,BlogJava里面高手如云,很希望能認識一下  回復  更多評論
      

    # re: 使用SWT擴展調用操作系統的信息 2009-06-09 10:44 VWPOLO
    對了,用這個插件調用網卡信息好像得到的信息好像不正確,不知道新的版本會不會修正這個問題  回復  更多評論
      

    # re: 使用SWT擴展調用操作系統的信息[未登錄] 2009-10-30 09:17 vwpolo
    對了,原來這個方式獲得的網卡信息是十進制的,需要將它轉換成十六進制的這樣才能在操作系統的命令行中輸入ipconfig顯示的信息一致  回復  更多評論
      

    主站蜘蛛池模板: 亚洲一区二区三区成人网站| 亚洲电影唐人社一区二区| 久久精品国产亚洲AV电影网| 性xxxxx免费视频播放| 亚洲成在人线中文字幕| 亚洲人成免费电影| 亚洲一级黄色大片| 免费A级毛片无码免费视| 亚洲av无码国产综合专区| 成年免费大片黄在线观看岛国| 激情亚洲一区国产精品| 啦啦啦中文在线观看电视剧免费版| 亚洲日韩国产精品乱-久| 永久黄网站色视频免费| 免费国产a理论片| 亚洲日本va中文字幕久久| 国产免费一区二区三区在线观看| 亚洲丁香色婷婷综合欲色啪| 人与禽交免费网站视频| 亚洲色大成网站www尤物| 国产美女无遮挡免费视频| 九九全国免费视频| 亚洲av片劲爆在线观看| 欧洲黑大粗无码免费| 免费国产草莓视频在线观看黄| 亚洲精品国产美女久久久| 啦啦啦完整版免费视频在线观看 | 自拍偷自拍亚洲精品情侣| 久久久久久久99精品免费观看| 亚洲ts人妖网站| 亚洲国产精品一区二区三区久久| a毛片在线还看免费网站| 亚洲人成在线精品| 亚洲国产精品13p| 外国成人网在线观看免费视频| 亚洲综合国产成人丁香五月激情| 亚洲人成人网站在线观看| 最近2019年免费中文字幕高清| 豆国产96在线|亚洲| 亚洲AV无码日韩AV无码导航| 免费的一级片网站|