如何在JavaGUI中快速更新图像

如何在JavaGUI中快速更新图像,java,swing,user-interface,jlabel,Java,Swing,User Interface,Jlabel,我想知道用JAVA显示和更新图像的最快方法是什么。我从一个插座上连续收到一系列图像,我想实时显示它们。我目前正在JFrame中使用Jlabel void refreshScreen(BufferedImage bufImg) { label.setIcon(new ImageIcon(bufImg)); frame.repaint(); frame.getContentPane().repaint(); } 然而,这是非常缓慢,需要15-20秒来更新,即使在我的快速计算机。理想的方法是什么?问

我想知道用JAVA显示和更新图像的最快方法是什么。我从一个插座上连续收到一系列图像,我想实时显示它们。我目前正在JFrame中使用Jlabel

void refreshScreen(BufferedImage bufImg)
{
label.setIcon(new ImageIcon(bufImg));
frame.repaint();
frame.getContentPane().repaint();
}

然而,这是非常缓慢,需要15-20秒来更新,即使在我的快速计算机。理想的方法是什么?

问题不在于更新图像。设置JLabel的图标时,它将立即重新绘制自身

问题可能是通过插座接收图像(计算机的速度在这里没有影响)。您必须确保使用套接字的代码不会阻止事件分派线程,因为这将阻止GUI重新绘制自身。因此,您需要为套接字连接使用单独的线程


有关更多信息,请阅读Swing教程中的部分。

如果JLabel的图标发生更改,则无需调用repaint。关键是在后台线程中读取图像,创建ImageIcon并在Swing事件线程上设置标签图标。请注意,速度与Swing无关,而与通过套接字传输图像有关。每次在套接字中接收图像时,我都会调用refreshScreen()。我看到图像很快进入插座,但在显示时有一个延迟。所以我猜套接字不是这里的瓶颈。它是图像的显示。@user2600028,问题不在于图像的显示。这将在图像完全加载后立即发生。正如我之前所建议的,您必须阻止EDT,以便它无法重新绘制图像。阅读教程。