Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.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
Java 如何在GUI中刷新web源图像_Java_Image_Swing_User Interface_Web - Fatal编程技术网

Java 如何在GUI中刷新web源图像

Java 如何在GUI中刷新web源图像,java,image,swing,user-interface,web,Java,Image,Swing,User Interface,Web,我用Java创建了一个简单的GUI应用程序,它在不同的部分显示来自web的某些图像 我遇到的问题是,在一段时间后(特别是40秒)刷新图像。我需要应用程序再次从web获取图像,并将其放置在三个JPanel中的一个,只要应用程序正在运行,每40秒一次 这是用于在应用程序启动时显示图像的代码: try { BufferedImage cameraOne = ImageIO.read(new URL("IMAGE LINK HERE")); BufferedImage cameraTwo

我用Java创建了一个简单的GUI应用程序,它在不同的部分显示来自web的某些图像

我遇到的问题是,在一段时间后(特别是40秒)刷新图像。我需要应用程序再次从web获取图像,并将其放置在三个JPanel中的一个,只要应用程序正在运行,每40秒一次

这是用于在应用程序启动时显示图像的代码:

try {
    BufferedImage cameraOne = ImageIO.read(new URL("IMAGE LINK HERE"));
    BufferedImage cameraTwo = ImageIO.read(new URL("IMAGE LINK HERE"));
    BufferedImage cameraThree = ImageIO.read(new URL("IMAGE LINK HERE"));

    cPanel1 = new CameraPanel(new ImageIcon(cameraOne).getImage());
    cPanel2 = new CameraPanel(new ImageIcon(cameraTwo).getImage());
    cPanel3 = new CameraPanel(new ImageIcon(cameraThree).getImage());
} catch (MalformedURLException ex) {
    throw new Error("One of the cameras you are trying to connect to doesn't exist!");
} catch (IOException ex) {
    throw new Error("CCTV couldn't connect to the required camera feeds!");
}
class CameraPanel extends JPanel {
   private Image img;

    public CameraPanel(BufferedImage cameraImage) {
        this(new ImageIcon(cameraImage).getImage());
    }

    public CameraPanel(Image img) {
        this.img = img;
        Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
        setPreferredSize(size);
        setMinimumSize(size);
        setMaximumSize(size);
        setSize(size);
        setLayout(null);
    }

    public void paintComponent(Graphics g) {
        g.drawImage(img, 0, 0, null);
    }
}
这是我用来尝试安排图像刷新的代码:

final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

final Runnable refreshTask = new Runnable() {
    public void run() {

        // I need help here
    }
};

final ScheduledFuture<?> refreshHandler = scheduler.scheduleAtFixedRate(refreshTask, 10, 40, TimeUnit.SECONDS);
有什么解决办法吗?谢谢


我创建的完整类可以在

找到,我假设您需要;指向要刷新的URL的引用;对与图像相关联的相机面板的引用;一种方法,通过该方法,新下载的图像可以重新应用于相机面板和相机面板更新编辑,尤其是应用于我遇到问题的相机面板的图像,以及更新相机面板。我尝试重新绘制cPanel1,但它只是在原始图像后面创建了一个重复图像。您需要将图像引用更改为刚刚下载的引用。这意味着您需要
CameraPanel
中的
setImage
方法,以便下载后,您可以传递该引用
CameraPanel
并重新绘制它。。。