2011-08-05 348 views
1

我想創建簡單的Swing應用程序,其中包含幾個JEditorPanes裏面。每個JEditorPane都包含帶有html標籤的文本。還有一些窗格包含標籤爲<img src='http://some.url' />的html,這意味着圖片可能位於網頁中的某處。 問題是 - 如果其中一個圖像URL不可用 - 我的所有JEditorPanes和整個應用程序都會顯示。(我構建JEditorPanes在自己的線程,建設後付諸使用SwingUtilities.invokeLater(...)主框架)JEditorPane問題與異步圖像下載

我相信,圖像下載到JEditorPanes異步,有沒有殺死這些hunging圖像下載線程的能力嗎?

或者,也許有更好的解決方案?

謝謝

P.S. 使用SwingWorker。麻煩的是 - 如果某些圖片url不可用 - 所有JEditorPanes都無法下載他們的圖片。事實上他們沒有掛,但無法下載圖像。爲什麼?

P.P.S.

後臺線程:

JEditorPane jtp=new JEditorPane(); 
    jtp.setContentType("text/html"); 
    jtp.setPreferredSize(newDimension(20,250));      
    StringBuilder sb=new StringBuilder(); 
    sb.append("<img src='").append(url).append("'/>"); 
    jtp.setText(sb.toString()); 

    SwingUtilities.invokeLater(new Runnable(){ 
    @Override 
    public void run() {        
     myPanel.add(rigid,0);   
     myPanel.add(jtp,0); 

     myPanel.revalidate(); 
     } 
    }); 

回答

2

考慮使用SwingWorker,與example或有可能啓動後臺任務從Runnable接口#線(輸出必須被包裹成的invokeLater()

+0

謝謝。但我使用它們。麻煩的是 - 如果某些圖片url不可用 - 所有JEditorPanes都無法下載他們的圖片。爲什麼? – stemm

+0

@stemm真的你必須發佈可運行的代碼,顯示你的issee(e),包括代碼在哪裏驗證/測試URL ...,因爲SWingWorker是相當可取消的 – mKorbel

+0

請看看我的問題的編輯。 – stemm

1

我與mKorbel同意後臺線程是要走的路(1+到他的答案),並且SwingWorker是一種方法,如果你需要同時運行多個後臺線程,使用Swing時要小心工作人員,但最近有一個錯誤,導致所有SwingWorkers只使用一個線程。在這種情況下,請考慮使用執行者/期貨。

+0

謝謝,請在我的問題中查看編輯。 – stemm

+0

你正在從後臺線程中進行swing調用,這會讓你感到困惑。請閱讀:[Swing中的併發](http://download.oracle.com/javase/tutorial/uiswing/concurrency/) –