您好,我正在做的是,我正在从客户端接收图像并在循环中显示它..数据已正确接收,但循环完成时仅显示最后接收的图像..
这不是线程中的主 Controller 。我不知道出了什么问题,因为它正在接收数据并且它应该在每次迭代时更新......
这里是代码:
@FXML ImageView currentframe;
public void run()
{
System.out.println("hi controller");
System.out.println("creating socket");
DatagramSocket serverSocket=null;
try {
serverSocket = new DatagramSocket(1001);
} catch (SocketException ex) {
Logger.getLogger(threadclass.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("created socket");
byte[] receiveData = new byte[50000];
//byte[] sendData = new byte[1024];
//BufferedImage img = null;
//Image image = null;
int counter = 0;
while(counter<20){
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
try {
serverSocket.receive(receivePacket);
} catch (IOException ex) {
Logger.getLogger(threadclass.class.getName()).log(Level.SEVERE, null, ex);
}
//System.out.println("packetreceive");
BufferedImage img = null;
try {
img = ImageIO.read(new ByteArrayInputStream(receivePacket.getData()));
} catch (IOException ex) {
Logger.getLogger(threadclass.class.getName()).log(Level.SEVERE, null, ex);
}
//System.out.println("packetreceive1");
System.out.println("received packet length "+receivePacket.getLength());
Image image= SwingFXUtils.toFXImage(img, null);
Image tempImg = image;
Platform.runLater(() -> currentframe.setImage(tempImg));
/*
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(threadclass.class.getName()).log(Level.SEVERE, null, ex);
}*/
//currentframe.setImage(image);
//threadclass t = new threadclass(currentframe, image);
//t.start();
//Platform.runLater(null);
counter++;
System.out.println("IMAGE SET ON FRAME...");
}
//System.out.println("ssdcd" );
// currentframe.setImage(image);
//System.out.println("last packet ");
}
这是我在 Controller 中启动线程的方式:
@FXML
public void btn(ActionEvent event) throws IOException, InterruptedException
{
threadclass t = new threadclass(currentframe);
t.run();
}
最佳答案
调用
t.run();
仅调用当前线程(可能是 FX 应用程序线程)上的 run()
方法。要启动一个新线程,您需要调用
t.start();
假设threadclass
(原文如此)是Thread
的子类。
关于java - ImageView 仅显示循环中的最后一张图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47417877/