Итак, у меня сейчас проблема с моим Java таймером Swing, но сначала позвольте мне описать, что я пытаюсь сделать.
Итак, у меня есть Swing GUI, который обновляет карту с помощью JSON данные каждые 'X' количество секунд. Пользователь может ввести количество секунд в текстовое поле, а затем нажать кнопку, чтобы начать обновление карты. Затем карта будет обновлена путем запроса JSON на основе ввода.
Поэтому я использую таймер Swing, чтобы повторить определенное событие действия на основе ввода пользователя. Видно ниже:
clickOkButton.addActionListener(e1 -> {
ActionListener actionListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String url = "";
url = new_text.getText();
layer[0] = (RenderableLayer) geo.createLayerFromSource(url);
appFrame.getWwd().getModel().getLayers().set(20, layer[0]);
ltree.getModel().refresh(appFrame.getWwd().getModel().getLayers());
}
};
int time = Integer.parseInt(queryTime.getText());
Timer timer = new Timer(time * 1000, actionListener);
timer.setRepeats(true);
//timer.setDelay(1);
timer.start();
d.setVisible(false);
//System.out.println(text);
});
Когда программа запускается в любое время, когда пользователь входит в первый раз, прекрасно работает. Но потом, если они меняют время, таймер не меняется.
int time = Integer.parseInt(queryTime.getText());
Timer timer = new Timer(time * 1000, actionListener);
Это как-то связано с этими строками, но я просто не могу понять это. Я вытаскиваю числовое значение из текстового поля и устанавливаю его как задержку в таймере. Но он работает только при первом запуске программы, а не при ее изменении.
Любая помощь будет высоко ценится.