您好, 访客   登录/注册

浅谈Java的本地应用开发

来源:用户上传      作者: 赵国海 张启龙

  【摘 要】Java对于本地调用是不直接提供的,本文应用了一种SWT扩展插件――SWT Win32 Extension,来实现对本地系统信息的使用,实现对屏幕的截取。代码开发简单,不必自己调用本地动态链接库,这种SWT扩展的插件应用范围较广且易掌握。
  【关键词】Java 本地调用 SWT插件
  【中图分类号】G642 【文献标识码】A 【文章编号】1674-4810(2011)24-0024-01
  
  一 背景介绍
  众所周知,Java是由SUN Microsystems公司推出的一种跨平台、纯面向对象程序设计语言和Java平台的总称。Java的平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface,简称API)构成。Java被广泛接受并推动了Web的迅速发展。现在Java平台已嵌入了几乎所有的操作系统,这样的Java程序就可以只编译一次,就可以在各种系统中运行。
  为了能够使用Java语言开发原生的Windows应用程序而不需要编写额外的JNI代码,可使用软件开发工具库SWT Win32 Extension。使用SWT Win32 Extension,将不需要创建原生的动态链接库来调用操作系统动态链接库的系统API或方法。而需要做的是编写Java代码,SWT Win32 Extension来负责剩下的部分。SWT Win32 Extension提供了一系列的功能使应用程序看上去和Win32本机程序并无区别。
  二 主要的使用类
  SWT扩展的插件org.eclipse.swt.extension封装了调用DLL的JNI方法,主要是负责底层操作系统的方法,不过可能会对程序的跨平台性会产生细小的影响,且只能使用于Windows操作系统。
  在实例程序中应用的Hook.MOUSE,便是对本地系统鼠标的操作引用。Toolkit类是所有 Abstract Window Toolkit 实际实现的抽象超类。通过调用Toolkit.getDefaultToolkit ( ).getScreenSize ( );获取主屏幕设备的尺寸。
  Robot类用于为测试自动化、自运行演示程序和其他需要控制鼠标和键盘的应用程序生成本机系统输入事件。Robot 的主要目的是便于 Java 平台实现自动测试,使用该类生成输入事件与将事件发送到 AWT 事件队列或 AWT 组件的区别在于:事件是在平台的本机输入队列中生成的。
  为了使用Robot类捕获屏幕,必须先创建一个Robot对象。public static void main (String args)方法尝试调用Robot的public Robot ( )构造函数来创建这个对象。如果创建成功,就会返回一个针对主屏幕设备坐标系的Robot引用。如果平台不支持低级控制(在没有屏幕设备的环境这是成立的),将会抛出java.awt.AWTException。如果平台不允许创建Robot对象就会抛出java.lang.SecurityException。
  假设Robot对象已被创建,main ( )调用类的构造函数创建一个GUI。因为用来显示屏幕捕获内容的Public BufferedImage createScreenCapture (Rectangle screenRect)方法,需要一个java.awt.Rectangle参数,所以构造函数通过rectScreenSize = new Rectangle (dimScreenSize);将java.awt. Dimension对象转换成为一个Rectangle对象。
  三 参考实例代码
  下面部分是程序的主要代码,nativeRb是Robot类实例,参数513代表鼠标左键值,注意对Hook.MOUSE注册监听器后要Hook.MOUSE.install ( );否则监听器不会启动。
  dimScreenSize=Toolkit. getDefaultToolkit( ). getScreen Size
  ( );
  rectScreenSize=new Rectangle (dimScreenSize);
  biScreen=nativeRb.createScreenCapture (rectScreenSize);
  ImageIO.write (biScreen, "jpg", mypicfile);
  Hook.MOUSE.addListener (new HookEventListener ( ){
  Public void acceptHookData (HookData hookData){
  if (hookData.getWParam ( )=513){
  mouseLN ( ); System.out.println (hookData.getWParam
  ( ));}});
  Hook.MOUSE.install ( );
  四 总结
  实例程序通过鼠标点击操作对本地系统屏幕进行截图,实现了对Windows系统的部分应用,也可方便地改为定时截取,可以在实验机房内监测一些上机操作。虽然应用SWT对程序开发简单,且能很好地与Windows结合,但也可能失去一定的可移植性,其中利弊还是由开发者自己来斟酌吧。
  〔责任编辑:王以富〕


转载注明来源:https://www.xzbu.com/9/view-1036500.htm