現象
我在一個按鈕的點擊事件中添加了,點擊事件的監聽如下,就會造成我多次點擊按鈕后,里面打開瀏覽器會執行多次
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);}
}