gr8vyguy@Blogjava

Java程序截获系统注销事件

Java 实在是一门很不错的语言,毫不例外的,Java也有这样那样的弱点。比如和C 语言比较性能上的差距,在 Java 解释器实现了JIT 功能后,差别不是那么大了,考虑今天的硬件速度,对大部分用户来说可以忽略不计。另一个弱点是 在需要和操作系统交互时,Java 总是显得那么力不从心。现在总算有了SWT ,希望开源的Java 有一天能够把SWT集成起来。

这里介绍一个简单例子,是Swing没法做到的。截获用户注销(Log off )事件以及终止它。

public   class  LogoffListener {
  
    public
  static   void  main(String[] args) {
       
final  Display display  =   new  Display();
        
final  Shell shell  =   new  Shell(display);
        display.addListener(SWT.Close, 
new  Listener() {
            
public   void  handleEvent(Event event) {
                MessageBox mb 
=   new  MessageBox(shell,
                        SWT.APPLICATION_MODAL 
|  SWT.OK  |  SWT.CANCEL);
                mb.setText(
" 询问 " );
                mb.setMessage(
" 退出系统? " );
                event.doit 
=  mb.open()  ==  SWT.OK;  
            }
        });

        shell.open();
        
while  ( ! shell.isDisposed()) {
            
if  ( ! display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }
}

 

当系统注销是, display 会得到一个SWT.Close 的事件。如果在事件处理函数中设置doit false ,将提示系统取消注销。在某些不支持这项操作的操作系统上,当然程序还是会被关掉,然后系统注销。Windows XP是支持的。

这里就有个问题了。在Java 这样一门Write Once, Run Anywhere为座右铭的语言中,这样的功能是不是有意义呢? 这一点能够引起大量的讨论。在这里我想简单说一点,能不能做,和应不应该做是两回事。一门通用的语言肯定会有需要这样的功能的时候,如果程序员发现没法在 Java 中实现,而需要借助 JNI 和另一门语言,程序员就会很失望。为什么我要用上两门语言呢?干脆我就用另外一门好了,比如C /C++

此外,用Java Swing 写的程序总和使用操作系统的API 写的程序有着细微的差异,比如拖拽Drag And Drop。 .在Java中, 需要先选中,然后按下鼠标左键不放,移动鼠标,再释放。而Windows 的拖拽模式不需要事先选中,这样的结果就是,用户经常需要拖拽两次才能成功,除非凑巧已经选中了。这样的例子很多,归根结底是因为Swing emulated Swing不使用操作系统提供的窗口控件。SWT 是封装了操作系统的原生窗口控件。用 SWT写的程序会和操作系统的原生程序一样。但是在不同的操作系统上会有差异。有人说这是一个SWT的缺点,本人以为这恰恰是SWT 的一个优点。 Java 总是强调自己的程序不受限于某一个操作系统,如果不能使用操作系统的原生功能,其实我们恰恰被限制在Java 这个系统下面。Java本身也是一个平台。



转载请保留http://www.blogjava.net/xilaile/archive/2007/02/16/100016.html

posted on 2007-02-15 17:50 gr8vyguy 阅读(4366) 评论(5)  编辑  收藏 所属分类: Java

评论

# re: Java程序截获系统注销事件 2007-02-19 04:37 陈朋奕

没搞过SWT,纯支持一下
呵呵  回复  更多评论   

# re: Java程序截获系统注销事件 2007-02-19 22:12 喜来了

太谢谢你的支持了,你可是第一个给我回评论的人阿  回复  更多评论   

# re: Java程序截获系统注销事件 2007-04-09 08:28 BeanSoft

我也来支持一下!  回复  更多评论   

# re: Java程序截获系统注销事件 2009-03-12 08:21 奏捷

关闭事件倒是能截获,但是最大化、最下化截获起来就不是那么回事儿了。
这也是我现在遇到的问题。
感兴趣的朋友一起讨论。
wsnzou@126.com  回复  更多评论   

# re: Java程序截获系统注销事件 2010-11-08 09:38 2

那Swing 能够实现这样的功能不  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2009年3月>
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

公告

  • 转载请注明出处.
  • msn: gr8vyguy at live.com
  • 常用链接

    留言簿(9)

    随笔分类(68)

    随笔档案(80)

    文章分类(1)

    My Open Source Projects

    搜索

    积分与排名

    最新评论