今日焦点 - 生活娱乐 - IT资讯 - 名企之窗  导航:首页 >> IT资讯 >> 使用SWT扩展调用操作系统的信息

使用SWT扩展调用操作系统的信息
作者:广州在线 来源:广州在线 更新日期:2017/9/22 阅读次数:
 最近在做一个客户端监控的功能,需要提取用户电脑的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,项目新建好了后我们可以写个类来测试一下,我写的测试类为:
  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编号: " + Extension.GetMACID());
  14 }
  15 }
  16
  这个类功能相当的简单,我的项目的文件结构为

  编辑特别推荐:

  指点一下:到底该不该去考JAVA认证?

  Java认证权威问答精华集
  注意要使程序顺利运行,必须要导入 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编号: [I@66848c

相关文章: