首页 > 解决方案 > 为什么相同的操作在 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")));
        }
    }
}

在此先感谢您的帮助。

标签: javaspringswingspring-scheduled

解决方案


推荐阅读