2014-08-28 5 views
0

Я использую Cron, чтобы запланировать загрузку файла на сервер в определенное время, заданное администратором. Я создал интерфейс на Java, в котором пользователь может выбрать время выполнения программы загрузки, и представить выбранные значения после того, как представляется следующий метод выполняется:cron schedule freeze

public class Reminder { 

String minute; 
//static int i=0; 
String heur; 
String substr=","; 
String patterns; 
List<String> list = null; 
List<String> lines = new ArrayList<>(); 


Timer timer; 
FTPUploadFileDemo up=new FTPUploadFileDemo(); 

    public void start() throws IOException { 
     /************ Get the chosen values from the administrator saved in a CSV file *********************************************************/ 
     BufferedReader reader; 
     try { 
      reader = new BufferedReader(new FileReader("C:/Users/BACKENDPC1/Desktop/timer.csv")); 


    String line = null; 
    while ((line = reader.readLine()) != null) { 
     lines.add(line); 


    }} catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace();} 
/**********************create cron patterns *********************************************/ 

     patterns=""; 
     for(int i=0; i<lines.size();i++) { 
      heur=lines.get(i).substring(0, lines.get(i).indexOf(substr)); 
      minute=lines.get(i).substring(lines.get(i).indexOf(substr) + substr.length()); 
      System.out.println("Time selected is: "+heur+","+minute); 
      patterns=patterns+minute+" "+heur+" * * *|"; 

     } 
     System.out.println(patterns); 


     // Creates the scheduler. 
     Scheduler scheduler = new Scheduler(); 
    // Schedules the task, once every minute. 
     scheduler.schedule(patterns,new RemindTask()); 
     scheduler.start(); 
     try { 
      Thread.sleep(1L * 60L * 1000L); 
     } catch (InterruptedException e) { 
      System.out.println(e); 
     } 
     // Stops the scheduler. 
     scheduler.stop(); 

    } 

    class RemindTask extends TimerTask { 

     public void run() { 



      up.Uplaod(); 



     } 
    } 

}

на планирование работ и он работает, но каждый раз, когда пользовательский интерфейс, который я создал, зависает, я не получаю никаких ошибок, и программа продолжает работать, но я больше не могу использовать интерфейс. Кто-нибудь может мне помочь.

+0

_Don't_ спать на EDT ; _do_ см. [* Параллельность в Swing *] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/) и [* Использование таймеров Swing *] (http://docs.oracle.com/ JavaSE/учебник/uiswing/разное/timer.html). – trashgod

ответ

0
public void start() throws IOException { 
.............. 
    try { 
     Thread.sleep(1L * 60L * 1000L); 
    } catch (InterruptedException e) { 
     System.out.println(e); 
    } 
............... 
} 

Почему вы останавливаете основную нить на 60 секунд? Планировщик запускает собственные задачи в отдельном потоке, поэтому вам не следует прерывать выполнение основного потока.

ТАКЖЕ, попробуйте поставить точки останова и отлаживать программу шаг за шагом и локализовать проблему

И не писать математические операции, как это:

1L * 60L * 1000L 

будет достаточно, чтобы написать:

1L * 60 * 1000 

Кроме того, каждый формат времени ваш код:

  • В Eclipse: Ctrl + Сдвиг + F

  • В IntelliJ IDEA: Ctrl + Alt + л