2014-08-27 4 views
0

관리자가 지정한 특정 시간에 파일을 서버에 업로드하는 프로그램에서 작업하는 경우 관리자는 배수 값 (시, 분)을 입력합니다.Java에서 여러 번 실행하는 일정 계획

예 :

[Hours,Minutes]= [2,12] [ 2,15],[ 5,20 ] 

나는 CSV 파일에 그 값을 저장합니다.

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();} 

     //Get the Date corresponding to 11:01:00 pm today. 
     Calendar calendar = Calendar.getInstance(); 
     SimpleDateFormat sdf = new SimpleDateFormat("HH"); 
     Format formatter = new SimpleDateFormat("m"); 
     Format sec=new SimpleDateFormat("s"); 

     /*heur=getList().get(i).substring(0, getList().get(i).indexOf(substr)); 
     minute=getList().get(i).substring(getList().get(i).indexOf(substr) + substr.length()); 
     System.out.println("Time selected is: "+heur+","+minute);*/ 
     while (i<lines.size()) { 
      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(sdf.format(calendar.getTime())); 
      System.out.println(Integer.parseInt(formatter.format(new Date()))); 
      if(Integer.parseInt(sdf.format(calendar.getTime()))==Integer.parseInt(heur)&&(Integer.parseInt(formatter.format(new Date()))==Integer.parseInt(minute))){ 


     System.out.println(Integer.parseInt(heur)+"H"+ Integer.parseInt(minute)); 

     calendar.set(Calendar.HOUR_OF_DAY,Integer.parseInt(heur)); 
     calendar.set(Calendar.MINUTE, Integer.parseInt(minute)); 
     calendar.set(Calendar.SECOND, 0); 
     Date time = calendar.getTime(); 

     timer = new Timer(); 
     timer.schedule(new RemindTask(), time); 
     i++; 
      }} 
     i=1; 

     start(); 


     /* timer = new Timer(); 
     timer.schedule(new RemindTask(), seconds*1000);*/ 
    } 

    class RemindTask extends TimerTask { 

     public void run() { 


      up.Uplaod(); 

     long start = new Date().getTime(); 
      long end=0; 
      int numIndexed=0; 
      boolean cond=true; 
      end = new Date().getTime(); 
      cond=false; 

      // System.out.println("Indexing " + numIndexed + " files took " 
      // + (end - start) + " milliseconds"); 

      timer.cancel(); 
      //Terminate the timer thread  

     } 

이 메서드를 실행하여 업로드 실행을 예약합니다. 그것은 두 번 작동하고 그 후 나는 오류 얻을 : 스레드 "AWT-EventQueue의-0"java.lang.NumberFormatException의에서

예외 : 입력 문자열 : "시간"java.lang.NumberFormatException의에서
을. forInputString (알 소스) java.lang.Integer.parseInt (알 소스)에 java.lang.Integer.parseInt
(알 소스)에 Reminder.start
(Reminder.java:64)에서
플랜에
.start (Reminder.java:80)
at csvFileUploadMulti $ 4.actionPerformed (csvFileUploadMulti.java:269) 0 javax.swing.AbstractButton.fireActionPerformed (알 수없는 소스)에서 javax.swing.AbstractButton $ Handler.actionPerformed (알 수없는 소스) javax.swing.DefaultButtonModel.fireActionPerformed에서
(알 수없는 소스)에서
있는 javax.swing에서
.DefaultButtonModel.setPressed (알 소스) javax.swing.plaf.basic.BasicButtonListener.mouseReleased (알 소스)에 java.awt.Component.processMouseEvent
(알 소스)
에서
javax.swing.JComponent.processMouseEvent에서 (알 수없는 출처)
at java.awt.Component.processEvent (알 수없는 소스) RCE)에있는 java.awt java.awt.Container.processEvent (알 소스)에 java.awt.Component.dispatchEventImpl
(알 소스)에 java.awt.Container.dispatchEventImpl
(알 소스)에

.Component.dispatchEvent (알 소스) java.awt.LightweightDispatcher.retargetMouseEvent (알 소스)에 java.awt.LightweightDispatcher.processMouseEvent
(알 소스)에
java.awt.LightweightDispatcher.dispatchEvent에서
(알 소스)
at java.awt.Container.dispatchEventImpl (알 수없는 소스)java.awt.EventQueue에서 java.awt.Window.dispatchEventImpl (알 소스)에 java.awt.Component.dispatchEvent
(알 소스)에 java.awt.EventQueue.dispatchEventImpl
(알 소스)
에서 0 .access $ 400 (알 수없는 소스) java.awt.EventQueue $의 3.run (알 수없는 소스) java.awt.EventQueue $의 3.run에서
(알 수없는 소스) java.security.AccessController.doPrivileged에서
(기본 방법에
)
at java.security.ProtectionDomain $ 1.doIntersectionPrivilege (알 수없는 소스)
at java.security.ProtectionDo main $ 1.doIntersectionPrivilege (알 수없는 소스) java.awt.EventQueue $의 4.run에서
(알 수없는 소스) java.awt.EventQueue $의 4.run에서
(알 수없는 소스) java.security.AccessController.doPrivileged (기본 방법)에서

java.awt.EventDispatchThread에서 java.security.ProtectionDomain $ 1.doIntersectionPrivilege (알 수없는 소스) java.awt.EventQueue.dispatchEvent에서
(알 수없는 소스) java.awt.EventDispatchThread.pumpOneEventForFilters에서
(알 수없는 소스)
에서 .pumpEventsForFilter (알 수없는 소스)
at java.awt.EventDispatchThread.pumpEventsFo rHierarchy (알 소스)에 java.awt.EventDispatchThread.pumpEvents
(알 소스)에 java.awt.EventDispatchThread.pumpEvents
(알 소스)에 java.awt.EventDispatchThread.run
(알 소스)

누군가 나를 도와 줄 수 있습니까?

+2

NumberFormatException : 입력 문자열의 경우 : "Hours" –

+0

문자열 "Hours"는 'int'로 구문 분석 될 수 없습니다. 실제 숫자를 추출 할 논리를 변경하십시오. –

+0

csv와 마찬가지로 열 이름이있는 헤더가 있습니다. 아마 그것을 건너 뛰십시오. – talex

답변

1

바퀴를 재발 명하지 마십시오. 시도해보십시오 cron.

+1

Meiblorn, 답변을 주셔서 감사합니다. cron을 사용해 보았습니다.하지만 이걸 가지고 있습니다 : http : //stackoverflow.com/questions/25540193/user-interface-freeze- with-cron-schedule 나 좀 도와 줄 수있어? – Amine

관련 문제