2016-03-22 11 views
-1

Bir grafikte farklı yol bulma algoritmalarının sonuçlarını görüntüleyen bir uygulama yapıyorum. Yani bir düğüm genişlediğinde her zaman vurgulanmasını istiyorum. Bu sebepten, bir düğümün genişlemesi her zaman icra edilen bir dinleyiciye sahibim. Ek olarak, süreci geciktirme olasılığı vardır.JavaFX: Doğrudan yeni bir stil sınıfının uygulanması nasıl yapılır?

Ancak yeni stil sınıfları, yalnızca algoritma bittikten sonra görüntülenecek gibi görünüyor. Diğer taraftan, konsol çıkışı çalışma zamanında doğru şekilde görüntülenir. Söz konusu

kodu:

IDiGraphSearchListener<XYNode, CostEdge<XYNode>> listener = new IDiGraphSearchListener<XYNode, CostEdge<XYNode>>() { 
    List<CostEdge<XYNode>> way; 
    @Override 
    public void onExpandNode(XYNode node, List<CostEdge<XYNode>> way) { 
     if (this.way == null) { 
      this.way = way; 
     } 
     System.out.println("Expanding"); 
     for (CostEdge<XYNode> costEdge : way) { 
       graphPane.lookup("#"+costEdge.getId()).getStyleClass().add("visited"); 
       graphPane.lookup("#"+costEdge.getSource().getId()).getStyleClass().add("visited"); 
       graphPane.lookup("#"+costEdge.getTarget().getId()).getStyleClass().add("visited"); 
       System.out.println("Coloring-> EdgeID:"+costEdge.getId()+" From:"+costEdge.getSource().getId()+" To:"+costEdge.getTarget().getId()); 
     }  
     try { 
      System.out.println("Sleeping"); 
      Thread.sleep((long) (pathfindingSpeedSlider.getValue()*1000)); 
     } catch (InterruptedException ex) { 
      //ToCatchOrNot 
     } 
    } 
}; 

Örnek çıktı:

Algo: AStar 
Expanding 
Expanding 
Coloring-> EdgeID:id20 From:id1 To:id2 
Coloring-> EdgeID:id25 From:id1 To:id4 
Coloring-> EdgeID:id45 From:id1 To:id9 
Expanding 
Coloring-> EdgeID:id21 From:id2 To:id3 
Coloring-> EdgeID:id20 From:id1 To:id2 
Coloring-> EdgeID:id25 From:id1 To:id4 
Coloring-> EdgeID:id45 From:id1 To:id9 
Expanding 
Coloring-> EdgeID:id21 From:id2 To:id3 
Coloring-> EdgeID:id20 From:id1 To:id2 
Coloring-> EdgeID:id25 From:id1 To:id4 
Coloring-> EdgeID:id45 From:id1 To:id9 
Expanding 
Coloring-> EdgeID:id21 From:id2 To:id3 
Coloring-> EdgeID:id20 From:id1 To:id2 
Coloring-> EdgeID:id46 From:id9 To:id5 
Coloring-> EdgeID:id25 From:id1 To:id4 
Coloring-> EdgeID:id45 From:id1 To:id9 
Expanding 
Coloring-> EdgeID:id21 From:id2 To:id3 
Coloring-> EdgeID:id20 From:id1 To:id2 
Coloring-> EdgeID:id46 From:id9 To:id5 
Coloring-> EdgeID:id25 From:id1 To:id4 
Coloring-> EdgeID:id28 From:id5 To:id6 
Coloring-> EdgeID:id45 From:id1 To:id9 
Expanding 
Coloring-> EdgeID:id21 From:id2 To:id3 
Coloring-> EdgeID:id20 From:id1 To:id2 
Coloring-> EdgeID:id46 From:id9 To:id5 
Coloring-> EdgeID:id25 From:id1 To:id4 
Coloring-> EdgeID:id30 From:id6 To:id7 
Coloring-> EdgeID:id28 From:id5 To:id6 
Coloring-> EdgeID:id35 From:id6 To:id11 
Coloring-> EdgeID:id45 From:id1 To:id9 
getWay1 
->id1/id9->id9/id5->id5/id6->id6/id7getWay2 
Finish 

cevap

2

gözlemlemek davranış oldukça normaldir. Yeni stiller ayarlıyorsunuz ancak bir sonraki nabızdan önce çalıştırılmayacaklar. Ancak uygulama iş parçasını kodunuzla engellediğiniz için, işiniz bitene kadar bir sonraki nabız gecikecektir.

+0

Nabız da gecikmeyi nasıl önleyebilirim? – Niels

+0

Bunu söylemek zor, çünkü aslında hangi davranışa ulaşmak istediğinizi anlamıyorum. Basit cevap, tüm işlemlerinizi başka bir iş parçacığında yapmak olacaktır. – mipa

+0

Algoritmanın grafikte nasıl ilerlediğini görselleştirmek istiyorum. Böylece, bir düğümün her genişletilmesinden sonra, yolun vurgulanması ve bir sonraki düğümün genişletilmesine kadar bir gecikme olması gerekir. Bazı örnek konsol çıktılarını ekledim. – Niels

İlgili konular