java - 为什么相同的操作在 ActionListener 中有效,但在 @schedule 方法中无效?
问题描述
在以下代码片段中,actionPerformed() 方法和 aggiornaAutomaticamente() 方法执行相同的操作。为什么,在 GUI 中,我看到由 JButton 调用的 actionPerformed() 的更改,但使用 aggiornaAutomaticamente() @scheduled 方法,即使执行操作也不会出现更改?
由于操作是正确的,因此我没有粘贴所有代码,而只粘贴了其中的一部分。
@Configuration
@EnableScheduling
public class Appoggio {
private JFrame frmClientPrestazioniChat;
private DateTimePicker dateTimePickerDa;
private DateTimePicker dateTimePickerA;
private JCheckBox chckbxAggiornaAutomaticamente;
private JPanel pnlFiltri;
/**
* Launch the application.
*/
public static void main(String[] args) {
// Comandi per usare spring
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(Appoggio.class);
ctx.refresh();
}
/**
* Create the application.
*/
public Appoggio() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
@SuppressWarnings("serial")
private void initialize() {
frmClientPrestazioniChat = new JFrame();
frmClientPrestazioniChat.setTitle("Client Prestazioni Chat");
frmClientPrestazioniChat.setBounds(100, 100, 1209, 563);
frmClientPrestazioniChat.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmClientPrestazioniChat.setExtendedState(frmClientPrestazioniChat.getExtendedState() | JFrame.MAXIMIZED_BOTH);
JSplitPane splitPaneMain = new JSplitPane();
splitPaneMain.setResizeWeight(0.2);
frmClientPrestazioniChat.getContentPane().add(splitPaneMain, BorderLayout.CENTER);
JScrollPane scrollPaneOpzioniFiltri = new JScrollPane();
splitPaneMain.setLeftComponent(scrollPaneOpzioniFiltri);
JPanel pnlOpzioniFiltri = new JPanel();
scrollPaneOpzioniFiltri.setViewportView(pnlOpzioniFiltri);
pnlOpzioniFiltri.setLayout(new BoxLayout(pnlOpzioniFiltri, BoxLayout.Y_AXIS));
JPanel pnlOpzioni = new JPanel();
pnlOpzioniFiltri.add(pnlOpzioni);
pnlOpzioni.setBorder(new TitledBorder(new LineBorder(new Color(0, 0, 0)), "Opzioni", TitledBorder.LEADING, TitledBorder.TOP, null, null));
pnlOpzioni.setLayout(new BoxLayout(pnlOpzioni, BoxLayout.X_AXIS));
chckbxAggiornaAutomaticamente = new JCheckBox("Aggiorna Automaticamente");
chckbxAggiornaAutomaticamente.setSelected(true);
pnlOpzioni.add(chckbxAggiornaAutomaticamente);
chckbxAggiornaAutomaticamente.setVerticalAlignment(SwingConstants.TOP);
JButton btnAggiorna = new JButton("Aggiorna");
btnAggiorna.addActionListener(new AggiornaListener());
pnlOpzioni.add(btnAggiorna);
Component verticalStrut_1 = Box.createVerticalStrut(20);
pnlOpzioniFiltri.add(verticalStrut_1);
pnlFiltri = new JPanel();
pnlOpzioniFiltri.add(pnlFiltri);
pnlFiltri.setBorder(new TitledBorder(new LineBorder(new Color(0, 0, 0)), "Filtri", TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 0)));
pnlFiltri.setLayout(new BoxLayout(pnlFiltri, BoxLayout.Y_AXIS));
JLabel lblDa = new JLabel("Da");
pnlFiltri.add(lblDa);
dateTimePickerDa = new DateTimePicker();
dateTimePickerDa.setDateTimePermissive(LocalDateTime.now().withHour(8).withMinute(0));
dateTimePickerDa.addDateTimeChangeListener(new DateTimeChangeListener() {
@Override
public void dateOrTimeChanged(DateTimeChangeEvent event) {
aggiorna(dateTimePickerDa.getDateTimePermissive().format(DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss")), dateTimePickerA.getDateTimePermissive().format(DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss")));
}
});
pnlFiltri.add(dateTimePickerDa);
Component verticalStrut = Box.createVerticalStrut(20);
pnlFiltri.add(verticalStrut);
JLabel lblA = new JLabel("A");
pnlFiltri.add(lblA);
dateTimePickerA = new DateTimePicker();
dateTimePickerA.setDateTimePermissive(LocalDateTime.now());
dateTimePickerA.addDateTimeChangeListener(new DateTimeChangeListener() {
@Override
public void dateOrTimeChanged(DateTimeChangeEvent event) {
aggiorna(dateTimePickerDa.getDateTimePermissive().format(DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss")), dateTimePickerA.getDateTimePermissive().format(DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss")));
}
});
pnlFiltri.add(dateTimePickerA);
Component verticalStrut_2 = Box.createVerticalStrut(20);
pnlOpzioniFiltri.add(verticalStrut_2);
aggiorna(dateTimePickerDa.getDateTimePermissive().format(DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss")), dateTimePickerA.getDateTimePermissive().format(DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss")));
}
private class AggiornaListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
dateTimePickerDa.setDateTimePermissive(LocalDateTime.now().withHour(8).withMinute(0));
dateTimePickerA.setDateTimePermissive(LocalDateTime.now());
aggiorna(dateTimePickerDa.getDateTimePermissive().format(DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss")), dateTimePickerA.getDateTimePermissive().format(DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss")));
}
}
@Scheduled(fixedDelay = 60000)
private void aggiornaAutomaticamente() {
if (chckbxAggiornaAutomaticamente.isSelected()) {
System.out.println("Aggiorno automaticamente");
dateTimePickerDa.setDateTimePermissive(LocalDateTime.now().withHour(8).withMinute(0));
dateTimePickerA.setDateTimePermissive(LocalDateTime.now());
aggiorna(dateTimePickerDa.getDateTimePermissive().format(DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss")), dateTimePickerA.getDateTimePermissive().format(DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss")));
}
}
}
在此先感谢您的帮助。
解决方案
推荐阅读
- node.js - 以后如何更改猫鼬模式的键?
- html - 为什么'col-md-6'在中间给出太多的空白?
- node.js - 如何使用猫鼬正确塑造发送到 NodeJS 服务器的搜索日期
- python - 如何将 MXDataIter 转换为 DataSet?
- c++ - 将几个 std::collections 输出到 CSV / 行第一次迭代的函数
- python - 如何使用python求解以下方程
- javascript - 在另一个双向数组 Y 中搜索双向数组 X 元素 - Javascript
- reactjs - react-router-dom v 6.0.0 中重定向的替代方法是什么?
- sql-server - 如何去除汉字字符串末尾的空格char(32)?
- php - 在 wordpres 的父帖子页面上显示子帖子