I need to change a local variable inside a lambda event handler in javafx.
SerialPort comPorts[] = SerialPort.getCommPorts();
MenuItem[] portsItems = new MenuItem[10];
int q=0;
for (SerialPort port : comPorts) {
portsItems[q] = new MenuItem(port.getSystemPortName());
portsItems[q].setOnAction(actionEvent -> {
portNum = q;
connect.setDisable(false);
});
comPortsMenu.getItems().add(portsItems[q]);
}
The problem is I need to increment q in each loop, but I can't do that because q
must be final or effectively final to be used inside a lambda.
I think you are looking for something like
for (SerialPort port : comPorts) {
portsItems[q] = new MenuItem(port.getSystemPortName());
int portNumber = q ; // effectively final
portsItems[q].setOnAction(actionEvent -> {
portNum = portNumber;
connect.setDisable(false);
});
comPortsMenu.getItems().add(portsItems[q]);
// increment:
q++ ;
}