JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java SE 討論區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友   
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
作者 請問如何將TimerTask內執行的結果回傳到外面的程式使用
964203038





發文: 1
積分: 0
於 2009-05-14 00:24 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
想請問一下
我想使用Timer在一定的時間後執行TimerTask內的程式
在TimerTask內的程式可以正確的執行並用System.out.println看到結果
但我想要將這個結果(一個String)讓TimerTask以外的程式能使用
請問該如何寫這樣的code呢?
感謝

程式碼概念如下
1
2
3
4
5
6
7
8
9
10
11
TimerTask   task   =   new   TimerTask()   {   
    
  public   void   run()   {   
       String teststring = "AAA";   //我想將這個AAA讓TimerTask以外的程式也能用
     }   
  };   
    
  Timer   timer   =   new   Timer();   
    
  timer.schedule(task,date);
  System.out.println(teststring);


reply to postreply to post
作者 Re:請問如何將TimerTask內執行的結果回傳到外面的程式使用 [Re:964203038]
mylee





發文: 764
積分: 1
於 2009-05-14 20:59 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
方法很多,牛刀是透過 file/db
雞刀的話,宣告一個 XXXTask extends TimerTask,然後有個 pubic 的 getter 來 get 你要 expose 的屬性就好了。


reply to postreply to post
作者 Re:請問如何將TimerTask內執行的結果回傳到外面的程式使用 [Re:mylee]
jun650723





發文: 11
積分: 0
於 2009-06-11 17:39 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我有試做test1 class及ReminderTask class, 我在test1 class還是取不到TimerTask內的回傳值, 該如何修改code呢??

run 出來的結果為:
test1 class..get file name == null
ReminderTask run()...
ReminderTask class fileName ==ipms001.xml

1
2
3
4
5
6
7
8
9
10
11
12
import java.util.Timer;
public class test1 {    
  public static void main(String[] args) {
    test1 t = new test1();
    Timer timer = new Timer();
    ReminderTask reminderTask = new ReminderTask(timer);
    //一秒後開始執行TimerTask, 而後每隔3秒執行一次, 檢查是否已完成掃描    
    timer.schedule(reminderTask, 1000, 3000);
     String fileName =  reminderTask.getFileName();
     System.out.println( "test1 class..get file name == "+fileName ); 
  }
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import java.util.Timer;
import java.util.TimerTask;
 
public class ReminderTask extends TimerTask{
  private int numExec = 5;
  private Timer timer;
  private String fileName;
  
  public ReminderTask(Timer timer) {
    this.timer = timer;
  }
  
  public void run() {
    System.out.println( "ReminderTask run()..." );
    String msgFile;
    String[] msgCodes;
    String[] xmlFiles;
     
     if (numExec > 0) {       
       numExec--;        
      try{        
        String commandUrl = "http://papago:7001/IPMSWeb/CsdServlet?action=get&userid=/ipms001";
        ServletHelper servletHelper = new ServletHelper();
        servletHelper.setCommandUrl(commandUrl);
        msgFile = servletHelper.runServlet();
        if (msgFile.length()>=1){
              String[] parms = msgFile.split("\\|");
              if(parms.length >= 4 ){                  
                msgCodes = parms[1].split(",");
                xmlFiles = parms[3].split(",");                  
                if (xmlFiles !=null){
                  timer.cancel();
                  fileName = xmlFiles[1];
                  System.out.println("ReminderTask class  fileName =="+fileName);
                }    
              }
          } 
      }  
      catch (Exception e){    
        e.printStackTrace();
      }
    }//end of if numExec
     else{
        timer.cancel();
     }
  }
 
  public String getFileName() {
    return fileName;
  }
  public void setFileName(String fileName) {
    this.fileName = fileName;
  }
}
 


reply to postreply to post
作者 Re:請問如何將TimerTask內執行的結果回傳到外面的程式使用 [Re:jun650723]
richard





發文: 96
積分: 1
於 2009-06-11 18:39 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
因為還沒跑到呀。
所以test1 class..get file name == null

且你這樣寫也有當機的機會,最好加非同步機制

我會這樣做,用一個傳資料的class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Temp
{
  private String data;
 
 Synchronized void setData(String data)
 {
   this.data = data;
 }
 
 String getData() 
 {
  return data;
 }
}
 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
   
import java.util.Timer;
public class test1 {    
  public static void main(String[] args) {
    test1 t = new test1();
    Temp temp = new Temp();
    Timer timer = new Timer();
    ReminderTask reminderTask = new ReminderTask(timer,temp);
    //一秒後開始執行TimerTask, 而後每隔3秒執行一次, 檢查是否已完成掃描    
    timer.schedule(reminderTask, 1000, 3000);
     String fileName =  reminderTask.getFileName();
     System.out.println( "test1 class..get file name == "+fileName );
 
   try
 {
    Thread.Sleep(3000);
      System.out.println( temp.getData();)
  }catch(Exception e)
{
}
 
}
 


reply to postreply to post
作者 Re:請問如何將TimerTask內執行的結果回傳到外面的程式使用 [Re:richard]
jun650723





發文: 11
積分: 0
於 2009-06-12 11:10 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我依您的建議將程式修改後, 執行時, 發現若在6秒過後才找到字串, 還是無法得到
回傳結果

test1 class..get file name == null
ReminderTask run()...
null
ReminderTask run()...
ReminderTask run()...
ReminderTask -- fileName ==> ipms001.xml
ipms001.xml --> 希望程式在此可以run出此行, 目前無此行


reply to postreply to post
» JWorld@TW »  Java SE 討論區

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8