| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2801 人关注过本帖, 1 人收藏
标题:用JAVA编写的一个自动关机软件,帮忙优化一下。
取消只看楼主 加入收藏
ggggwffgqeg
Rank: 2
等 级:论坛游民
帖 子:40
专家分:11
注 册:2009-5-10
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:2 
用JAVA编写的一个自动关机软件,帮忙优化一下。
/*定时关机程序*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import *;

public class AutoShutdown extends JFrame implements ActionListener,Runnable{
    JLabel copyright,jlclew1,jlhour,jlminute,jlclew2,leave;
    JTextField jthour,jtminute;
    JButton run,exit;
    boolean falg=false;
    public AutoShutdown(){
        super("自动关机");
    }
    //窗体布局
    public void setPane(){
        copyright=new JLabel("制作人:天马行空",JLabel.CENTER);
        copyright.setBounds(50,5,200,50);

        jlclew1=new JLabel("系统将于:");
        jlclew1.setBounds(10,65,80,30);        
        jthour=new JTextField();
        jthour.setBounds(90,65,60,30);
        
        jlhour=new JLabel(" 时 ");
        jlhour.setBounds(150,65,30,30);        
        jtminute=new JTextField();
        jtminute.setBounds(180,65,60,30);
        jlminute=new JLabel(" 分 ");
        jlminute.setBounds(240,65,30,30);
        jlclew2=new JLabel("后关机");
        jlclew2.setBounds(270,65,80,30);   

        leave=new JLabel("请输入时间",JLabel.CENTER);
        leave.setBounds(50,100,200,50);
        
        run=new JButton("开始运行");
        run.setBounds(60,160,100,30);
        run.addActionListener(this);
        exit=new JButton("结束");
        exit.setBounds(180,160,100,30);
        exit.addActionListener(this);
        
        Container ct=this.getContentPane();
        ct.setLayout(null);
        ct.add(copyright);
        ct.add(jlclew1);
        ct.add(jthour);
        ct.add(jlhour);
        ct.add(jtminute);
        ct.add(jlminute);
        ct.add(jlclew2);
        ct.add(leave);
        ct.add(run);
        ct.add(exit);
        this.setSize(350,230);
        this.setVisible(true);
    }
   
    /*public void shutdown(){
        Runtime rt=Runtime.getRuntime();
        String str="shutdown -l";
        try{
        rt.exec("shutdown -a");   
        }catch(IOException e){System.out.println("调用关机命令时系统出错");}
        System.exit(0);
    }   
   
    */
    public void getDateMonth(){
        int hour,minute,dthour,dtminute,dt1,dt2;
        //dthour 表示当前小时
        //dtminute 表示当前分钟
        //dt1 表示程序将在某小时关机
        //dt2 表示程序将在某分钟关机
        try{
        if(jthour.getText().equals("")){
            minute=Integer.parseInt(jtminute.getText());
            hour=0;
        }
        else if(jthour.getText().equals("")){
            hour=Integer.parseInt(jthour.getText());
            minute=0;
        }
        else{
            minute=Integer.parseInt(jtminute.getText());
            hour=Integer.parseInt(jthour.getText());
        }
        //获取要关机的时间
        dt1=new Date().getHours()+hour;
        dt2=new Date().getMinutes()+minute;
       // this.setVisible(false);      
        
        while(true){        不用while行吗?太费资源。
                //获取当前时间
                dthour=new Date().getHours();  
                dtminute=new Date().getMinutes();  
               
                System.out.println(dthour+" "+dtminute+" "+(new Date().getSeconds()));
                    //为什么leave.setText()显示不出来倒计时呀。
                leave.setText(((dt1-dthour)*3600+(dt2-dtminute)*60)+"后关机");
                //系统关机提示
                if((dt2-dtminute)<=2 && (dt1-dthour)==0 && !falg){                    
                    int a=JOptionPane.showConfirmDialog(null,"程序将在2分钟以内关机您确定吗?","关机提示",0,0 );
                    if(a==1){
                        AutoShutdown as=new AutoShutdown();
                        as.setPane();
                        break;
                    }
                    falg=true;
                }
                if(dt1==dthour && dt2==dtminute){
                    run();
                    break;
                }   
               
                Thread.sleep(60000);
        }
        }catch(NumberFormatException e){leave.setText("时间格式不正确");}
        catch(HeadlessException e2){e2.printStackTrace(); }
        catch(InterruptedException e1){e1.printStackTrace();}        
        return;
    }
    //设置按钮监听
    public void actionPerformed(ActionEvent e) {
        if(e.getSource().equals(run)){
            getDateMonth();
        }
        else
            System.exit(0);        
    }
    public static void main(String args[]){
        AutoShutdown as=new AutoShutdown();
        as.setPane();
    }
    @Override
    //调用关机命令
    public void run() {        
        exec("C:\\WINDOWS\\system32\\calc.exe");
    }
    private void exec(String cmd) {        
        try {
            Runtime.getRuntime().exec(cmd);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

大家看看这个程序哪些地方要改呀。
怎么判断系统时间与关机时间是不是相等,不用while语句行吗?。
我没有让程序关机而是打开了计算器,要让大家运行时关机可就不好意思了。

[ 本帖最后由 ggggwffgqeg 于 2009-11-1 14:13 编辑 ]
搜索更多相关主题的帖子: 自动 编写 软件 JAVA 
2009-11-01 13:51
ggggwffgqeg
Rank: 2
等 级:论坛游民
帖 子:40
专家分:11
注 册:2009-5-10
收藏
得分:0 
继承的那个类和实现的接口可以在JDK里面查到功能和使用方法.
2009-11-01 17:55
ggggwffgqeg
Rank: 2
等 级:论坛游民
帖 子:40
专家分:11
注 册:2009-5-10
收藏
得分:0 
恩,明白了。谢谢
2009-11-01 23:02
快速回复:用JAVA编写的一个自动关机软件,帮忙优化一下。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042192 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved