现象
我在一个按钮的点击事件中添加了,点击事件的监听如下,就会造成我多次点击按钮后,里面打开浏览器会执行多次
listviewitemListener = new ChangeListener() {@Overridepublic 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() {@Overridepublic 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就可以了
private ChangeListener listviewitemListener=null;@FXML
void check(ActionEvent event) {if(listviewitemListener!=null){infoLV.getSelectionModel().selectedItemProperty().removeListener(listviewitemListener);}
}