* Я использую 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(), интерфейс не обновляется сам, пока агент движется, потому что он ждет завершения действия агента!
Я думал об отключении интерфейса от агента, а затем включил его, как только агент будет выполнен, но я не уверен, что это сработает, и самая большая проблема здесь заключается в том, что агент не должен возиться с меню.
Итак, чтобы подвести итог, мне нужен поток, выполняющий обновление интерфейса/перенос агента, но этот поток не может быть тем же самым, что и в меню. Кажется, что в настоящее время существует один поток, выполняющий оба. Предполагая, что это возможно и не слишком сложно.
только то, что я искал (чистое взаимодействие от рабочего потока к графическому интерфейсу) –