日期:2014-05-20  浏览次数:20618 次

J2SE 异步更新窗口的数据源
我的窗口需要显示14个页面的缩略图,但是生成一个缩略图大于需要2s,我不希望用户一直等待14*2=28s之后才开始给用户看这些缩略图,我打算这样:
1,生成5个缩略图的时候窗口显示出来,此时用户可以看到5个缩略图
2,等用户在看前5个缩略图时,后面接着生成其他的缩略图,且推送新生成的缩略图给窗口。

我现在的做法是:
	
int index = 1;
while (!donePrinting(index)) {
image = getPage(index);
if (image != null) {
saveImage(image, index);
image.flush();
image = null;
}
if (allImages.size() >= 5) {

try {
dialog = new BookPreviewUsingPics(allImages, getNumOfPages());
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}

final int realIndex = index + 1;
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
getLeftImages(realIndex);
}
});

return;
}
index++;
}


	private void getLeftImages(int index) {
System.out.println("Start to getLastImages from index :" + index);
BufferedImage image = null;
while (!donePrinting(index)) {
image = getPage(index);
if (image != null) {
saveImageAndSend(image, index);
image.flush();
image = null;
}
index++;
}

image = getBackCoverPage();
if (image != null)
saveImageAndSend(image, getNumOfPages() + 1);
}

private void saveImageAndSend(BufferedImage image, int i) {
System.out.println("Start to saveImageAndSend for index :" + i + " image :" + image);
HashMap<Integer, BufferedImage> images = new HashMap<Integer, BufferedImage>();
images.put(i, image);
if (dialog != null) {
System.out.println("--> Start to sendBufferedImage for index :" + i);
dialog.sendBufferedImage(images);
}
}


但是这样的话,窗口刚起来时,点击窗口没有反应,只有等14个页面全部生成了,窗口才响应了用户的点击事件,请问各位,你们知道是什么原因吗?该如何修改啊!
异步 j2se