现象
我在一个按钮的点击事件中添加了,点击事件的监听如下,就会造成我多次点击按钮后,里面打开浏览器会执行多次
java
listviewitemListener = new ChangeListener() {
@Override
public void changed(ObservableValue observable, Object oldValue, Object newValue) {
int start = 0;
String numStr = null;
String valuesStr = newValue.toString();
String[] strArray = valuesStr.split(":");
valuesStr = strArray[1];
numStr = valuesStr.substring(0, 8);
if (Integer.valueOf(numStr) > 0) {
String finalNumStr = numStr;
Platform.runLater(new Runnable() {
@Override
public void run() {
String path = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe";
String target = "https://xxxx=" + finalNumStr;
List<String> cmd = new ArrayList<String>();
cmd.add(path);
// cmd.add("--start-maximized");// 窗口启动最大化
// cmd.add("--incognito");// 隐身模式打开
// cmd.add("--user-data-dir=D:/test");
cmd.add(target);
ProcessBuilder process = new ProcessBuilder(cmd);
try {
process.start();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
};
infoLV.getSelectionModel().selectedItemProperty().addListener(listviewitemListener);
解决方法
先把listener设置为类的属性,开始设置为null,然后在按钮点击的时候判断不为null的时候remove这个listener就可以了
java
private ChangeListener listviewitemListener=null;
@FXML
void check(ActionEvent event) {
if(listviewitemListener!=null){
infoLV.getSelectionModel().selectedItemProperty().removeListener(listviewitemListener);
}
}