java如何在JFrame中刷新图像?
有一些服务器,我需要从中获取图像。这张照片有时会更新。程序需要得到这个图像,并始终全屏显示在屏幕上。我写了一些代码,只要运行一次就可以了。但我无法处理图像更新。我需要每隔XX分钟或XX秒从服务器获取图像,并将其显示在屏幕上。可能我需要一些刷新图像的函数,比如-repaint(),但我不知道如何在这段代码中正确使用它。我试过骑自行车和穿线。sleep()但由于创建了许多多余的对象,它无法正常工作。。。请帮帮我
public class MyParser {
public static void main(String[] args) throws IOException, InterruptedException {
String urlStr = "http://192.168.11.111/images/SGBWebServerImage.bmp";
JFrame frame = new JFrame();
URL url = new URL(urlStr);
BufferedImage image = resize(ImageIO.read(url), 320, 1920);
ImageIcon icon = new ImageIcon(image);
frame.add(new JLabel(icon));
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setBackground(Color.BLACK);
frame.pack();
frame.setVisible(true);
}
private static BufferedImage resize(BufferedImage img, int height, int width) {
Image tmp = img.getScaledInstance(width, height, Image.SCALE_SMOOTH);
BufferedImage resized = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
Graphics2D g2d = resized.createGraphics();
g2d.drawImage(tmp, 0, 0, null);
g2d.dispose();
return resized;
}
# 1 楼答案
使用
Swing Timer
来安排一些活动。阅读Swing教程中关于How to Use Swing Timers的部分以了解更多信息计时器启动时,您需要:
这意味着您需要重新构造代码,以便有一个对标签的引用。所以你需要摆脱所有的静态方法
您可以查看:No delay in GUI execution even after implementing sleep in a separate thread以获取示例。只需替换
actionPerformed(...)
方法中的逻辑即可获得图像并更新标签的图标