* Я использую Java.
У меня есть этот поток, агент, который исследует комнату, чтобы определить ее размер и очистить ее, если она грязная. Тогда у меня есть интерфейс, который рисует агент, поскольку он исследует окружающую среду. Агент является подклассом из Thread, а Java заботится об управлении потоками. Все, что я делаю, это создаю поток и говорю object.start ().
Это очень хорошо работает при нормальных условиях. Тем не менее, меню включены в это время, и это означает, что пользователь может связываться с комнатой, пока агент исследует ее. Этого не должно быть.
Итак, как только пользователь щелкнет опцию, которая говорит агенту убирать комнату, я бы хотел отключить все меню. За исключением того, что это не работает, как должно. Вот проблема:
...
public void ActionPerformed(ActionEvent e)
{
//disable the menus with setEnabled(false);
agent.start();
//enable the menus with setEnabled(true);
}
Проблема в том, что меню активируются до того, как поток агента выполнит свою функцию. Я думал об использовании Thread.join () - это гарантировало бы, что код для включения меню выполняется только после завершения потока агента. Но, если я использую Thread.join (), интерфейс не обновляется, пока агент движется, потому что он ждет завершения агента!
Я думал об отключении интерфейса от агента и последующем включении его после завершения работы агента, но я не уверен, что это сработает, и самая большая проблема здесь заключается в том, что агент не должен возиться с меню.
Итак, чтобы подвести итог, мне нужен поток, выполняющийся для обновления интерфейса / отрисовки движущегося агента, но этот поток не может быть тем же, который включает меню. Кажется, в настоящее время есть один поток, делающий оба. Предполагая, что это возможно и не слишком сложно.