JFrame - Loop над JButton ActionPerformed в JFrame [дубликат]

Я думаю, что лучший вопрос: «Когда вы будете использовать @classmethod vs @staticmethod?»

@classmethod позволяет вам легко получить доступ к закрытым членам, которые связаны с определением класса. это отличный способ сделать одиночные игры или фабричные классы, которые контролируют количество экземпляров созданных объектов.

@staticmethod обеспечивает предельный прирост производительности, но мне еще предстоит увидеть продуктивное использование статического метод внутри класса, который не может быть выполнен как автономная функция вне класса.

0
задан Silentdarkness 7 March 2013 в 11:46
поделиться

2 ответа

Не зная полной степени того, что вы пытаетесь сделать, это не совсем возможно для вас точный ответ.

Из звуков вещей, которые вы пытаетесь запустить долго выполняемые задачи в контексте Событие Dispatching Thread.

Блокировка этой нити предотвращает перерисовку Swing.

Из того, что я могу сказать, вы хотите использовать SwingWorker . Это позволит вам выполнять свою работу в фоновом потоке, а повторная синхронизация обновлений обратно в EDT

Обновлена ​​с помощью примера

Я знаю, что вы сказали, что не «хотите» использовать a SwingWorker, но, честно говоря, это просто проще и безопаснее ...

enter image description here [/g1]

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingWorker;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class LongRunningTask {

    public static void main(String[] args) {
        new LongRunningTask();
    }

    public LongRunningTask() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                new BackgroundWorker().start();

            }
        });
    }

    public class BackgroundWorker extends SwingWorker<Object, Object> {

        private JFrame frame;

        public BackgroundWorker() {
        }

        // Cause exeute is final :P
        public void start() {
            ImageIcon icon = new ImageIcon(getClass().getResource("/spinner.gif"));
            JLabel label = new JLabel("This might take some time");
            label.setIcon(icon);

            frame = new JFrame("Testing");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLayout(new GridBagLayout());
            frame.add(label);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);

            execute();
        }

        @Override
        protected Object doInBackground() throws Exception {

            System.out.println("Working hard...");
            Thread.sleep(1000 + (((int)Math.round(Math.random() * 5)) * 1000));
            System.out.println("Or hardly working...");

            return null;

        }

        @Override
        protected void done() {
            frame.dispose();
        }

    }
}
3
ответ дан MadProgrammer 25 August 2018 в 11:33
поделиться

Вы используете Timer Class в пакете java.util и планируете timertask, чтобы закрыть заставку через некоторое время, скажем, 2 минуты или задача завершена.

 final Processing nc = new Processing();
 nc.setVisible(true);
 Timer timer = new Timer():
 TimerTask task = new TimerTask() {
      public void run() { 
          nc.setVisible( false );
          // to do disposing nc
      }
 };
 timer.schedule( task, 1000 * 3 ); // dispose the processing frame after 3 minutes
0
ответ дан Gnanasekaran Palanisamy 25 August 2018 в 11:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: