[英]JTable Image render is Taking too much load In Application
我正在使用Swing的Java應用程序,正在獲取數據,正在使用Swing Jtable Render渲染圖像,但是當數據更多時候一直掛着時,我該怎么做才能防止這種情況發生?
我正在使用的示例渲染。
public class DefaultTableCellRenderer extends javax.swing.table.DefaultTableCellRenderer {
JLabel jLabel;
public DefaultTableCellRenderer() {
jLabel = new JLabel();
}
public Component getTableCellRendererComponent(
JTable table, Object value, boolean selected, boolean focus, int row, int col) {
try {
if (row == 1) {
jLabel.setIcon(new ImageIcon(ImageIO.read(getClass().getResource("blank.png"))));
jLabel.setText("Image Data");
jLabel.setBackground(Color.LIGHT_GRAY);
} else {
jLabel.setIcon(new ImageIcon(ImageIO.read(getClass().getResource("blank.png"))));
jLabel.setText("Final");
}
//jLabel.setIcon(new ImageIcon(ImageIO.read(new File("blank"))));
return jLabel;
} catch (Exception e) {
e.printStackTrace();
}
return jLabel;
}
@Override
public boolean mouseEnter(Event evt, int x, int y) {
System.out.println(jLabel.getText());
return true;
}
}
這個...
jLabel.setIcon(new ImageIcon(ImageIO.read(getClass().getResource("blank.png"))));
這是一個昂貴的調用,每次調用時,都會創建一個新的ImageIcon
類,該類將讀取的BufferedImage
數據包裹起來。 與ImageIcon
不同, ImageIO
不會緩沖圖像並重新使用它們,而是會重新讀取資源。
這意味着,每次渲染單元時,圖像都會被完全重新加載。
因為每次都加載相同的圖像,所以在構造類時簡單地加載圖像,並在需要時使用它,例如...
public class DefaultTableCellRenderer extends javax.swing.table.DefaultTableCellRenderer {
private Icon icon;
public DefaultTableCellRenderer() throws IOException {
icon = new ImageIcon(ImageIO.read(getClass().getResource("blank.png");
}
public Component getTableCellRendererComponent(
JTable table, Object value, boolean selected, boolean focus, int row, int col) {
super.getTableCellRendererComponent(table, value, selected, focus, row, col);
setIcon(icon);
if (row == 1) {
setText("Image Data");
setBackground(Color.LIGHT_GRAY); // You may need to set the opaque state for this to work...
} else {
setText("Final");
}
return this;
}
}
給您一些建議:
doInBackground()
方法中實現。 加載某些圖像后,可以使用publish()
/ process()
方法使用新圖像更新表模型。 doInBackground()
方法中使用Executors
doInBackground()
。 我認為,您的問題不是CPU負載。 您的問題是IO。 從硬盤讀取速度很慢,應盡可能在后台讀取。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.