JavaFX网络后台任务与javafx.concurrent

问题描述:

我正在实施一个JavaFX应用程序,它是通过wifi(android)与移动电话进行通信。JavaFX网络后台任务与javafx.concurrent

因此,我对JavaFX的一个服务器线程在后台进程运行:

public class NetworkService implements Runnable { 

    private final ServerSocket serverSocket; 
    private final ExecutorService pool; 

    private RoutePlannerJFX application; 
    private UserData userData; 


    public NetworkService(ExecutorService pool, 
          ServerSocket serverSocket, 
          RoutePlannerJFX app, 
          UserData data) { 
     this.serverSocket = serverSocket; 
     this.pool = pool; 
     application = app; 
     userData = data; 
    } 


    public void run() { 
     try { 
      while (true) { 
       Socket cs = serverSocket.accept(); 
       pool.execute(new Handler(serverSocket, cs, application, userData)); 
      } 
     } catch (IOException ex) { 
      System.out.println("--- Interrupt NetworkService-run"); 
     } 
     finally { 
      System.out.println("--- Ende NetworkService(pool.shutdown)"); 
      pool.shutdown(); //keine Annahme von neuen Anforderungen 
      try { 
       pool.awaitTermination(4L, TimeUnit.SECONDS); 
       if (!serverSocket.isClosed()) { 
        System.out.println("--- Ende NetworkService:ServerSocket close"); 
        serverSocket.close(); 
       } 
      } catch (IOException e) { } 
      catch (InterruptedException ei) { } 
     } 
    } 
} 

具有处理程序:

public class Handler implements Runnable { 

    private final Socket client; 
    private final ServerSocket serverSocket; 

    private RoutePlannerJFX application; 
    private UserData userData; 


    Handler(ServerSocket serverSocket,Socket client, RoutePlannerJFX app, UserData data) { 
     this.client = client; 
     this.serverSocket = serverSocket; 
     application = app; 
     userData = data; 
    } 


    public void run() { 
     StringBuffer sb = new StringBuffer(); 
     PrintWriter out = null; 
     try { 
      System.out.println("running service, " + Thread.currentThread()); 
      out = new PrintWriter(client.getOutputStream(), true); 
      BufferedReader bufferedReader = 
       new BufferedReader(
        new InputStreamReader(
         client.getInputStream())); 
      char[] buffer = new char[100]; 
      int anzahlZeichen = bufferedReader.read(buffer, 0, 100); 
      String nachricht = new String(buffer, 0, anzahlZeichen); 
      String[] werte = nachricht.split("\\s"); 


      System.out.println(nachricht+"\n"); 

      POI poi = new POI(nachricht); 
      userData.addItemToPoiList(poi); 

      application.setScene("INSTRUCT"); 

     } catch (IOException e) {System.out.println("IOException, Handler-run");} 
     finally { 
      System.out.println(sb); //Rückgabe Ergebnis an den Client 
      if (!client.isClosed()) { 
      System.out.println("****** Handler:Client close"); 
      try { 
       client.close(); 
       } catch (IOException e) { } 
      } 
     } 
    } 
} 

应用程序有一个公共的方法来改变场景(setScene ())。

这就是我希望我能做到的方式,但现在我知道,我无法在后台进程中切换场景。

有没有人知道如何实现这个问题?当我的后台进程收到来自客户端的消息时,我需要发起一个动作,但是我不知道最好的方法是什么......我已经找到了javafx.concurrent,但是我必须使用哪一个?

提前致谢!

对于您可以使用一个任务或服务作为documentation

描述在一个单独的线程&更新运行GUI您可以检查这个帖子太JavaFX Async Task

客户端