Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swing 如何阻止JLabel.seticon不停地在其他内容上重新绘制_Swing_Jlabel - Fatal编程技术网

Swing 如何阻止JLabel.seticon不停地在其他内容上重新绘制

Swing 如何阻止JLabel.seticon不停地在其他内容上重新绘制,swing,jlabel,Swing,Jlabel,我试图保留一个名为GUIWindow的JInternalFrame。SpecialOptionsPopUp位于另一个JInternalFrame上,其中包含一个名为“标签”的JLabel。当标签不断更新其中的图像时,就会出现问题 import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.Image; import java.awt.image.BufferedImage; import java.awt.i

我试图保留一个名为
GUIWindow的
JInternalFrame
。SpecialOptionsPopUp
位于另一个
JInternalFrame
上,其中包含一个名为“标签”的
JLabel
。当标签不断更新其中的图像时,就会出现问题

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JInternalFrame;
public class ForumQuestion extends JFrame {

    private JPanel contentPane;
    private JLabel label;
    private JInternalFrame internalFrame;
    private JInternalFrame internalFrame_1;
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ForumQuestion frame = new ForumQuestion();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public ForumQuestion() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        internalFrame_1 = new JInternalFrame("New JInternalFrame");
        internalFrame_1.setBounds(0, 0, 424, 250);
        contentPane.add(internalFrame_1);

        label = new JLabel("");
        internalFrame_1.getContentPane().add(label, BorderLayout.NORTH);
        internalFrame_1.setVisible(true);

        internalFrame = new JInternalFrame("New JInternalFrame");
        internalFrame.setBounds(145, 25, 171, 195);
        contentPane.add(internalFrame);
        internalFrame.setVisible(true);

        UpdateImage updateimage = new UpdateImage();
        updateimage.start();


    }

    private class UpdateImage extends Thread{

        public UpdateImage(){

        }
        public void run(){
            while(true){
                label.setIcon(new ImageIcon("C:/Users/Ali/EclipseWorkspace/ForumQuestion/testimage.png"));
                internalFrame.repaint();
                contentPane.setComponentZOrder(internalFrame, 0);
            }
        }
    }

}

尝试包括一个。我不知道为什么你会有一个while循环。JInternalFrame只能添加到JDesktopPane中,不应在标签上方涂漆。如果你想要一个弹出窗口,那么你应该使用模态JDialog或者JOptionPane。Sing不是线程安全的,你违反了swing的单线程规则。也许您想解释一下为什么在线程内的无限循环中加载相同的映像?正如程序员所说,线程没有正确完成。这甚至可能没有必要。此外,正如camickr所说,为什么要使用while循环?除此之外还有无限。我打赌这也没有必要。这可能是您想要的:我正在使用OpenCV,在这里我操作视频的每一帧并将其显示在标签上。while循环的无限性仅用于示例目的。如果线程对swing不好,我能想到的唯一替代方法就是为JInternalFrame提供某种侦听器。请让我知道路。