【发布时间】:2015-04-22 04:44:17
【问题描述】:
我收到一个缓冲图像作为 byte[] 但是当我更新 JLabel 的图标时,JFrame 上没有任何变化,甚至重新验证 JFrame 和 JLabel。 相反,当我尝试在 JOptionPane 中显示 JLabel 时,它可以正常工作。 我不明白为什么。 这是代码:
public class ScreenMonitorServer extends JFrame
{
private String botIPAddress;
private ServerSocket serverSocket;
private Socket botSocket;
private JLabel screen;
public ScreenMonitorServer(String botIPAddress)
{
super(botIPAddress+" - Screen Monitor");
this.botIPAddress=botIPAddress;
setLayout(new FlowLayout());
screen=new JLabel();
add(screen);
setVisible(true);
try
{
serverSocket=new ServerSocket(54323);
do
botSocket=serverSocket.accept();
while(!botSocket.getInetAddress().getHostAddress().equals(botIPAddress));
ObjectInputStream ois=new ObjectInputStream(botSocket.getInputStream());
while(true)
{
BufferedImage image;
InputStream in=new ByteArrayInputStream((byte[])ois.readObject());
BufferedImage bImageFromConvert=ImageIO.read(in);
ImageIcon screenImage=new ImageIcon(bImageFromConvert);
setSize(bImageFromConvert.getWidth(),bImageFromConvert.getHeight());
screen.setIcon(screenImage); //black screen
JOptionPane.showMessageDialog(null,screen); //works fine
}
}
catch(IOException exc)
{
exc.printStackTrace();
}
catch(ClassNotFoundException exc)
{
}
}
}
【问题讨论】:
标签: java swing jframe jlabel joptionpane