In meinem Programm mache ich oft Änderungen an der Benutzeroberfläche mit einem anderen Thread. Die Änderungen sehen wie folgt aus:Platform.runLater() mit Lambda-Ausdruck funktioniert nicht
buffer.add(new Object[]{message.getSecondNode().getUINode(), "red"});
deshalb ich diese Änderungen, um Puffer nicht die Benutzeroberfläche zu überlasten. In der folgenden Methode führt das Programm jedoch nicht alle Änderungen im Puffer aus.
private void changeColor(List<Object[]> buffer) {
Platform.runLater(() -> {
for (Object[] object : buffer) {
if (object[0] instanceof UIEdge) {
UIEdge edge = (UIEdge) object[0];
edge.setColor((String) object[1]);
} else if (object[0] instanceof UINode) {
if ((String) object[1] == "red")
Util.print("");
UINode node = (UINode) object[0];
node.getEllipse().setFill(Paint.valueOf((String) object[1]));
}
}
});
}
Im folgende Bild sehen Sie, dass der Puffer eine andere Größe in dem Verfahren zu seiner globalen Größe im Programm hat. Weiß jemand warum?
Ist 'buffer' ein threadsicherer Typ? – RealSkeptic
OT, aber 'if ((String) object [1] ==" red ")' [wird nicht funktionieren] (http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in -java) –
@James_D In diesem Beispiel wird es funktionieren (mit String-Literalen), aber es ist wahrscheinlich Glück. – assylias