drawingPanel中的刷新图片扩展了JPanel 2

时间:2011-08-05 09:09:36

标签: swing asynchronous refresh jpanel

我为发布一个与此类似的线程而道歉。但我仍然有一些问题。可以看到线程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。但我的代码卡在那里。 所以我想我会找到一种方法强制在那一点上执行队列中的所有命令,但我不知道该怎么做。

有没有人有类似摇摆的问题?

1 个答案:

答案 0 :(得分:1)

使用ImageIO.read(File/URL/InputStream)等阻止方法获取ImageImageIO已被引入J2SE“最近”。