javafx не перерисовывает ярлык до завершения метода, почему? - PullRequest
0 голосов
/ 06 мая 2010

У меня есть приложение JavaFX с некоторым кодом, подобным этому ...

public class MainListener extends EventListener{
    override public function event (arg0 : String) : Void {
     statusText.content = arg0;
    }
}

statusText определяется следующим образом ...

    var statusText = Text {
    x: 30
    y: stageHeight - 40
    font: Font { name: "Bitstream Vera Sans Bold" size: 10 }
    wrappingWidth: 420
    fill: Color.WHITE
    textAlignment: TextAlignment.CENTER
    content: "Status: awaiting DBF file."
};

У меня также есть какой-то другой Javacode, который загружает данные, очень похоже на это ..

public ArrayList<CustomerRecord> read(EventListener listener) {

    ArrayList<CustomerRecord> listOfCustomerRecords = new ArrayList<CustomerRecord>();
        listener.event("Status: Starting read");

        // ** takes a while...
        List<Map<String, CustomerField>> customerRecords = new Reader(file).readData(listener);
        // ** long running method over.

        listener.event("Status: Loaded all customers, count:" + listOfCustomerRecords.size());
    return listOfCustomerRecords;
}

Теперь, когда последний метод находится в длительном вызове, я ожидаю, что мой statusText будет обновлен и теперь будет иметь статус Status: Starting read, но его нет. Только когда метод read () возвращает, текст обновляется.

Если бы это была «прямая» java, я бы предположил, что длительное задание загружает процессор, или в statusText должен был быть вызван repaint ().

Кто-нибудь может дать мне какие-нибудь идеи?

Спасибо Джефф Портер

1 Ответ

1 голос
/ 06 мая 2010

JavaFX является однопоточным, поэтому все, что вы делаете в основном потоке, будет блокировать перерисовки. Если вы хотите перекрасить во время запуска метода, вам нужно запустить в отдельном потоке. Для этого вы можете, например, использовать javafx.async.JavaTaskBase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...