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提供某种侦听器。请让我知道路。