有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    I need to get image every XX minutes or seconds from server and show it on the screen.

    使用Swing Timer来安排一些活动。阅读Swing教程中关于How to Use Swing Timers的部分以了解更多信息

    计时器启动时,您需要:

    1. 从服务器获取映像
    2. 更新JLabel的图标

    这意味着您需要重新构造代码,以便有一个对标签的引用。所以你需要摆脱所有的静态方法

    您可以查看:No delay in GUI execution even after implementing sleep in a separate thread以获取示例。只需替换actionPerformed(...)方法中的逻辑即可获得图像并更新标签的图标