обновленное приложение графического интерфейса - PullRequest
2 голосов
/ 10 февраля 2012

Мне нужно написать приложение, которое будет проверять что-то каждый раз X и обновлять его до комитетов GUI.Я немного разбираюсь в java и написал несколько приложений раньше, но я никогда не занимался такими вещами, как множественные потоки и обновление GUI.программного обеспечения.Все остальное в значительной степени функционирует.Я просто не могу заставить приложение выполнять проверки каждый раз, а затем обновлять графический интерфейс.

Может кто-нибудь дать несколько советов по этому поводу?На что я смотрю?какова общая практика?Это темы?рекурсивная?что-нибудь еще?

Также, если возможно, предоставьте мне несколько примеров кода, я могу лучше понять.

спасибо за любые усилия!

Ответы [ 2 ]

6 голосов
/ 10 февраля 2012

Я предполагаю, что вы используете Swing.Если это так, используйте Swing Timer .

Или, если проверка сама по себе является какой-то длительной задачей, которую нельзя выполнять в потоке графического интерфейса пользователя (поскольку она может его заморозить), используйте SwingWorker и отправьте ее в ScheduledExecutorService , созданный классом Executors .

2 голосов
/ 11 февраля 2012

Попробуйте что-то вроде:

private volatile boolean  killCheck;

public void startChecking()  {
    killCheck = false;
    Thread  checker = new Thread()  {
        public void run()  {
            for (;;)  {
                try { Thread.sleep( 500 ); }
                catch (InterruptedException ie)  { break; }
                if (killCheck)  break;
                EventQueue.invokeLater( new Runnable()  {
                    public void run()  {
                        // Update GUI here on EventQueue.
                    }
                } );
            }
        }
    };
    checker.start();
}

public void stopChecking()  { killCheck = true; }

Таймеры (а их по крайней мере два, в разгаре и в размерах) - это весело и элегантно, но иногда вам просто нужно выполнить работу.Замените мои 500 на ваше "время X".Обязательно звоните в Swing на EventQueue!И, возможно, добавить сообщение, если возникнет InterruptedException.

Проверьте SwingWorker;он будет делать то же самое с большей безопасностью, но если вы собираетесь делать многое из этого, вы можете обнаружить, что у вас есть больше возможностей сделать это самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...