我試圖在Java中編寫簡單的應用程序以僅從郵件服務器獲取所有標題。事實上,除了在使用DefaultTableModel時在JTable中顯示數據之外,所有的工作都很好。 重點是我在郵箱中有大約6k條消息:P。當我觸發下載頭按鈕GUI掛起,直到收到最後一條消息 - 然後我可以在JTable中正確地看到一切。每當我從單個消息中獲取標題時,JTable就不會更新 - 只有在所有消息都已下載完畢後 - 纔會掛起GUI。爲了找出發生了什麼,我寫了另一個應用程序添加行到JTable。在Delphi更新GUI中有簡單的「Application.ProcessMessages」...我不知道如何在java(swing)中實現相同的功能..請幫助。 代碼:在循環中添加行時動態更新Jtable
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.DefaultTableModel;
public class NewApplication extends javax.swing.JFrame {
String[] in;
public NewApplication() {
initComponents();
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
in=new String[5];
in[0]="0";
in[1]="1";
in[2]="2";
in[3]="3";
in[4]="4";
for(Integer r=0;r<5000;r++)
{
try {
add(in);
Thread.sleep(5);
}
catch (InterruptedException ex) {
Logger.getLogger(NewApplication.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public void add(String[] in)
{
DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
model.addRow(new Object[]{in[0], in[1], in[2],in[3],in[4]});
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewApplication().setVisible(true);
}
});
}
}
什麼是增加單排後更新JTable中simpliest方式? Regards
你剛纔是如何期待在你循環並調用EDT中的Thread.sleep時發生重繪?這將阻止EDT處理繪畫請求。請看看[併發中的Swing](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html),特別是關於SwingWorker的部分 – MadProgrammer