2011-09-09 12 views
1

我想使用Timer和TimerTask類的簡單調度器看到下面的代碼,我只是想打印「Hello,World!」的任務內部。在頁面上,但它拋出IOException:流關閉。請幫忙!Java。嘗試使用簡單調度程序(Timer,TimerTask)在JSP頁面上打印後獲取IOException。需要幫助

JSP頁面代碼:

<% Test t = new Test(out);%> 

測試類代碼:

public class Test { 
    public Test(JspWriter out){ 
     Timer timer = new Timer(); 
     LpdbTask lTask = new LpdbTask(); 
     lTask.out = out; 
     timer.scheduleAtFixedRate(lTask, 1000*5, 1000*60); 
    } 
} 

LpdbTask代碼:

public class LpdbTask extends TimerTask{ 
    public JspWriter out; 
    public void run(){ 
     try { 
      out.println("Hello, World!"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

錯誤:

java.io.IOException: Stream closed 
    at org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java:204) 
    at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:312) 
    at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java:342) 
    at org.apache.jasper.runtime.JspWriterImpl.print(JspWriterImpl.java:468) 
    at org.apache.jasper.runtime.JspWriterImpl.println(JspWriterImpl.java:576) 
    at scheduler.LpdbTask.run(LpdbTask.java:14) 
    at java.util.TimerThread.mainLoop(Unknown Source) 
    at java.util.TimerThread.run(Unknown Source) 

回答

3

JSP的Java代碼全部在用戶看到您的頁面之前運行。在Timer觸發時,JSP已經發送到瀏覽器並呈現;該流確實是關閉的,因爲它不再需要。這只是不可能做的事情。

如果您希望在用戶瀏覽器的頁面上發生與時間有關的事情,那麼您必須在Javascript,Flash或Java Applet中執行此操作;所有這些運行在桌面上,而不是運行在服務器上的JSP。

+0

厄內斯特,謝謝你的快速反應! –