0
こんにちは、私はクライアントから画像を受け取ってループに表示しています。データは正しく受信されましたが、ループが終了すると最後に受信した画像のみが表示されますImageViewはループ内の最後の画像のみを表示します
これはスレッド内のメインコントローラではありません。ここでは....
を私はそれがデータを受信していますいただきました!間違っていると知っていないと、それはすべての繰り返しで更新する必要がありますコードです:ここ
@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 ");
}
は私は、コントローラ内のスレッドを始めている方法です。
単に現在でrun()
メソッドを呼び出します
t.run();
を呼び出す
@FXML
public void btn(ActionEvent event) throws IOException, InterruptedException
{
threadclass t = new threadclass(currentframe);
t.run();
}
あなたはバックグラウンドスレッドでこれを実行していないようですね。どのようにスレッドを開始しているかを示します。 –
ボタンイベントを使用してスレッドを開始しました。コードを追加しました。 –
うん、 't.run()'? –