我为发布一个与此类似的线程而道歉。但我仍然有一些问题。可以看到线程here
我正在向jpanel应用backfround。我需要有一个装载礼物,稍后会更改为ok或错误图像。
我在开头加载一张明显的图片。一旦动作监听器通过加载一个启动就被替换,并且在监听器中执行的代码的最后,我用ok / error改变数字。透明,确定和错误一个完全加载,但我没有设法看到加载一个。
这是我的听众代码:
void refreshButtonActionPerformed(java.awt.event.ActionEvent evt) {
// load loading icon
Image img = new ImageIcon(iconPath+"loading.gif").getImage();
this.iconPanel.replaceImage(img);
this.iconPanel.updateUI();
this.iconPanel.revalidate();
this.iconPanel.repaint();
// clear table contents
designValue.clear();
deployValue.clear();
// Fill class
diagnosticGenerator diagnostic = new diagnosticGenerator();
Vector<Integer> indexes;
// if modeCombo.getSelectedIndex() == 0 i show only data regarding the current user
if (modeCombo.getSelectedIndex() == 0) {
// receive Design Table
designValue.addAll(diagnostic.getDesignContents());
// receive Deploy Table
deployValue.addAll(diagnostic.getDeployContents());
// receive indexes of out-dated deploy
indexes = new Vector<Integer>(diagnostic.getOutdatedDeployIndexes());
}
// otherwise i show data of all the users
else {
// receive Design Table
designValue.addAll(diagnostic.getDesignContents_allUsers());
// receive Deploy Table
deployValue.addAll(diagnostic.getDeployContents_allUsers());
// receive indexes of out-dated deploy
indexes = new Vector<Integer>(diagnostic.getOutdatedDeployIndexes_allUsers());
}
// set default color to green
deployTable.resetColor(Color.white);
// set red background to the
for (Integer x : indexes)
deployTable.setRowColor(x, Color.red);
deployTable.repaint();
designTable.revalidate();
deployTable.revalidate();
//update refreshLabel with the new date
Date date = new Date();
refreshLabel.setText(date.toString());
//replace icon with different mark depending on the fact if we found an error or not
if(indexes.isEmpty())
img = new ImageIcon(iconPath+"ok.png").getImage();
else
img = new ImageIcon(iconPath+"error.png").getImage();
this.iconPanel.replaceImage(img);
this.iconPanel.repaint();
}
我认为这是异步消息的问题,因为如果我在
之后呼叫等待this.iconPanel.repaint();
我可以看到加载gif。但我的代码卡在那里。 所以我想我会找到一种方法强制在那一点上执行队列中的所有命令,但我不知道该怎么做。
有没有人有类似摇摆的问题?
答案 0 :(得分:1)
使用ImageIO.read(File/URL/InputStream)
等阻止方法获取Image
。 ImageIO
已被引入J2SE“最近”。