Ağır işlem yapan birden çok iş parçacığı çalıştıran bir JavaFX uygulamasına sahibim.JavaFX UI Platform.runLater() ile birçok iş parçacığı kullanarak donma
mainThread = new MainThread(mc);
mainThread.start();
: Sorun bir süre UI tamamen donar sonra, ama sadece parçacığı kalanını çoğaltılır benim ana iş parçacığı başlatmak yol Platform.runLater()
ile UI güncellenmesiyle Burada iş parçacığı ana denetleyiciye, bu başvuruyu iş parçacıklarının geri kalanına iletir, böylece bir TextArea öğesine bir şeyler yazdırabilirler.
ana iş parçacığı aynı anda yalnızca 2 alt konuları çoğaltılır, ancak bu iki alt ipler ayarlanabilir evre sayısının (100+) ile ExecutorService kullanın:
Şimdi ipler dosya indirme gibi sürü şeyi yokexecutor = Executors.newFixedThreadPool((Integer.valueOf(mainController.getIndexController().getThreadsField().getText())));
for(int i = 0; i < newTasks.size(); i++){
Runnable slaveThread = new SlaveThread(dataLink, url);
executor.execute(slaveThread);
}
ama sanırım bu UI'yi etkilememeli. Arayüzden ara sıra okurlar, ama bu sorun olmamalı.
Platform.runlater() işlevini kullanarak, kullanıcı arabirimi donmuş olamaz.
Platform.runLater(() -> {
mainController.getIndexController().writeToConsole(result);
});
Arabirimi değiştiren başka bir kodum olmadığı için, bu sorun olmalıdır. Program çok fazla Platform.runLater() - s yürütüyor, çok mu? Veya fazla ne kadar? Arayüzün benimkinden daha sık güncellendiği ve iyi çalıştığı pürüzsüz kullanıcı arayüzüne sahip başka uygulamalar da var. Sorun ne olabilir? Teşekkürler.
Yani bazı güncellemeler kaybolacak? – Joey
Bazı bireysel güncellemeler gerçekleştirilmeyecek, doğru. Ancak güncellemeniz kullanıcı arayüzünü güncellediğinden, bunları zaten kareler oluşturulduğundan daha sık güncellemek istemezsiniz. Yani Bunu yapmak istemiyorsanız, etiket.setText ("X") "," label.setText ("Y"), "label.setText (" Z ") -" "X" ve "Z" ye ayarlanması - ara güncelleme kullanıcı tarafından asla görülmeyecektir. –