我想让Client端每天定时自动执行一个程序(.exe),用JAVA台何实现???
    多谢!

解决方案 »

  1.   

    简单的就用windows的任务计划吧,正好执行exe文件,如果非要使用java的话可以用timer或者开源的框架quartz
      

  2.   


    javax.swing 
    类 Timer
    java.lang.Object
      javax.swing.Timer
    所有已实现的接口: 
    Serializable --------------------------------------------------------------------------------public class Timerextends Objectimplements Serializable在指定时间间隔触发一个或多个 ActionEvent。一个示例用法是动画对象,它将 Timer 用作绘制其帧的触发器。 设置计时器的过程包括创建一个 Timer 对象,在该对象上注册一个或多个动作侦听器,以及使用 start 方法启动该计时器。例如,以下代码创建并启动一个每秒(该时间由 Timer 构造方法的第一个参数指定)触发一次动作事件的计时器。Timer 构造方法的第二个参数指定接收计时器动作事件的侦听器。 int delay = 1000; //milliseconds
      ActionListener taskPerformer = new ActionListener() {
          public void actionPerformed(ActionEvent evt) {
              //...Perform a task...
          }
      };
      new Timer(delay, taskPerformer).start();构造 Timer 时要指定一个延迟参数和一个 ActionListener。延迟参数用于设置初始延迟和事件触发之间的延迟(以毫秒为单位)。启动了计时器后,它将在向已注册侦听器触发第一个 ActionEvent 之前等待初始延迟。第一个事件之后,每次超过事件间延迟时它都继续触发事件,直到被停止。 构造之后,可以单独更改初始延迟和事件间延迟,并且可以添加其他 ActionListener。 如果希望计时器只在第一次时触发然后停止,可以对计时器调用 setRepeats(false)。 尽管所有 Timer 都使用一个共享线程(由第一个执行操作的 Timer 对象创建)执行等待,但是 Timer 的动作事件处理程序还会在其他线程(事件指派线程上)执行。这意味着 Timer 的操作处理程序可以安全地在 Swing 组件上执行操作。但是,它也意味着处理程序必须快速执行以保证 GUI 作出响应。 在 1.3 版本中,向 Java 平台添加了另一个 Timer 类:java.util.Timer。该类和 javax.swing.Timer 的基本功能相同,但是 java.util.Timer 更常用,功能更多。javax.swing.Timer 有两个特征,它们可以让使用 GUI 更方便。首先,其事件处理程序都是 GUI 程序员所熟悉的,并且可以更简单地处理事件指派线程。第二,其自动线程共享意味着不必采取特殊步骤来避免生成过多线程。相反,计时器使用同一个线程让光标闪烁、使工具提示显示等等
    public Timer(int delay,
                 ActionListener listener)创建一个 Timer 并将初始延迟和事件间延迟初始化为 delay 毫秒。如果 delay 小于等于 0,则该计时器一启动就触发事件。如果 listener 不为 null,则它会在计时器上注册为动作侦听器。 参数:
    delay - 初始延迟和动作事件间延迟的毫秒数
    listener - 初始侦听器;可以为 null
    另请参见:
    addActionListener(java.awt.event.ActionListener), setInitialDelay(int), setRepeats(boolean)
    start
    public void start()启动 Timer,使它开始向其侦听器发送动作事件。 
      

  3.   

      JAVA Timer我看了 我理解它好象是运行一个程序,此程序决定多长时间来运行某一个任务。可是这个程序如何自动运行???
      

  4.   

    timer定时执行他就可以了
    public void run(){
    String[] cmd={"c:\\1.exe"}
    try {
    ProcessBuilder builder = new ProcessBuilder(cmd);  
     //both read inputstream and errstream  
     builder.redirectErrorStream(true);  
     Process process;
     process = builder.start();
     BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));  
     String readLine = br.readLine();  
     while (readLine != null) {  
    System.out.println(readLine);  
    readLine = br.readLine();  
     }  
    int resultValue = process.waitFor();  //返回0正常
    System.out.println(resultValue);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }  
    }
      

  5.   

    lz的意思是怎么定时起动  java 程序!!!
    这好像得用windows的计划任务!!!
    或者java程序一直开着  
      

  6.   

    其实用BAT或者VB可以很简单的就实现
      

  7.   

    quartz Java Timer 不错。 quartz专门做定时器的
      

  8.   

    楼主如果使用TIMER的话,可将Timer包括到你的EXE文件,我做的一个实现如下:
    public class ScheduleRun{    
        Timer timer;
        InetAddress serverInetAddr;
        private String serverAddr="10.56.46.103";
        private int port=15015;
        
        public ScheduleRun(int delaytime){
            timer = new Timer();
            //推迟0秒执行, 间隔delaytime分钟重复运行. 
            timer.schedule(new ScheduleRunTask(),0,delaytime * 60 * 1000); 
            //推迟delaytime 秒后执行(只执行一次)
            //timer.schedule(new ScheduleRunTask(),delaytime  * 1000);    
        }
        public void stop(){
            timer.cancel();
        }
        
        public class ScheduleRunTask extends TimerTask{        public void run() {
            
    try {
    serverInetAddr = stringToInetAddress(serverAddr); } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
                  Client client=new Client(serverInetAddr,port);//要定时执行的类          }
        
        }
        //将String类型转换为InetAddress的方法
        InetAddress stringToInetAddress(String strIp) {
            int[] intAddr = new int[4];
            int[] intAddrOK = new int[4];
            String[] strAddrOK = new String[4];
            byte[] byteAddrOK = new byte[4];
            InetAddress ia = null;
           //将String用正则表达式进行分解
            String[] strArray = strIp.split("\\.");
            for (int i = 0; i < 4; i++) {
               intAddr[i] = Integer.valueOf(strArray[i]).intValue();
               if ((intAddr[i] <= 127) && (intAddr[i] >= -127))
                   intAddrOK[i] = intAddr[i];
               else
                   intAddrOK[i] = intAddr[i] - 256;
               // int 转换到 string
               strAddrOK[i] = String.valueOf(intAddrOK[i]);
               // string 转换到byte
               byteAddrOK[i] = Byte.parseByte(strAddrOK[i]);
            }
            try {
               ia = InetAddress.getByAddress(byteAddrOK);
            } catch (UnknownHostException e) {
               e.printStackTrace();
            }
            return ia;
        }
        
        public static void main(String[] args){
            new ScheduleRun(1);        //实现定时器MAIN方法,做为程序的入口点
        }
        
    public String getServerAddr() {
    return serverAddr;
    }
    public int getPort() {
    return port;
    }
    }
      

  9.   


    你做完编译成runnable jar,然后用工具做成windows服务之类的,这样的工具,搜索引擎告诉你一大堆