Java 如何在GUI中刷新web源图像
我用Java创建了一个简单的GUI应用程序,它在不同的部分显示来自web的某些图像 我遇到的问题是,在一段时间后(特别是40秒)刷新图像。我需要应用程序再次从web获取图像,并将其放置在三个JPanel中的一个,只要应用程序正在运行,每40秒一次 这是用于在应用程序启动时显示图像的代码: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
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
并重新绘制它。。。