除非我单击 window 标题,否则 JLabel 无法正常工作
JLabel isn't working properly unless I click window title
我有一个程序,我试图在其中显示一张图片,5 秒后它从 JLabel 中删除图片,然后显示第二张图片,但第二张图片不会自行显示,除非我单击 header 或程序创建的 window 顶部的栏。我希望在不与 window 交互的情况下自动显示图像。有帮助吗?
public void pictures(){
try{
BufferedImage myPicture = ImageIO.read(new File("round-1.jpg"));
JLabel picLabel = new JLabel(new ImageIcon(myPicture));
picLabel.setSize(800,600);
add(picLabel);
picLabel.setVisible(true);
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run(){
picLabel.setVisible(false);
pictures2();
}
}, 5000);
}
catch(IOException e){
e.printStackTrace();
}
}
public void pictures2(){
try{
BufferedImage myPicture2 = ImageIO.read(new File("go.png"));
JLabel picLabel2 = new JLabel(new ImageIcon(myPicture2));
picLabel2.setSize(800,600);
add(picLabel2);
picLabel2.setVisible(true);
}
catch(IOException e){
e.printStackTrace();
}
}
可能是因为您的定时器任务的工作(运行方法)运行在一个单独的线程中,而不是在 Swing 事件处理线程中?
我怀疑您应该在计时器的 运行 方法中调用 SwingUtilities.invokeLater
,以便在 Swing 事件处理线程中完成对标签的更改。
我有一个程序,我试图在其中显示一张图片,5 秒后它从 JLabel 中删除图片,然后显示第二张图片,但第二张图片不会自行显示,除非我单击 header 或程序创建的 window 顶部的栏。我希望在不与 window 交互的情况下自动显示图像。有帮助吗?
public void pictures(){
try{
BufferedImage myPicture = ImageIO.read(new File("round-1.jpg"));
JLabel picLabel = new JLabel(new ImageIcon(myPicture));
picLabel.setSize(800,600);
add(picLabel);
picLabel.setVisible(true);
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run(){
picLabel.setVisible(false);
pictures2();
}
}, 5000);
}
catch(IOException e){
e.printStackTrace();
}
}
public void pictures2(){
try{
BufferedImage myPicture2 = ImageIO.read(new File("go.png"));
JLabel picLabel2 = new JLabel(new ImageIcon(myPicture2));
picLabel2.setSize(800,600);
add(picLabel2);
picLabel2.setVisible(true);
}
catch(IOException e){
e.printStackTrace();
}
}
可能是因为您的定时器任务的工作(运行方法)运行在一个单独的线程中,而不是在 Swing 事件处理线程中?
我怀疑您应该在计时器的 运行 方法中调用 SwingUtilities.invokeLater
,以便在 Swing 事件处理线程中完成对标签的更改。