Я пишу программу, которая создает пользовательскую панель ввода и должна ждать, пока пользователь нажмет кнопку «запрос», прежде чем выполнять какие-либо вычисления. В настоящее время я использую ReentrantLock для этого.
input = new InputPanel(config, files, runLock);
JScrollPane inputScroll = new JScrollPane(input);
cySouthPanel.add("MyProgram", inputScroll);
cySouthPanel.setSelectedIndex(cySouthPanel.indexOfComponent("MyProgram"));
runLock.lock();
try {
// do stuff
}
finally {
runLock.unlock();
}
В настоящее время я получаю блокировку в конструкторе InputPanel и освобождаю ее, когда пользователь нажимает кнопку «запрос», но моя программа не останавливается, когда сталкивается с runLock.lock()
выше. Есть идеи, почему?
РЕДАКТИРОВАТЬ: Моя проблема связана с тем, что InputPanel работает в том же потоке, что и функция, которую я описал выше. В этом случае lock()
не блокируется.
Мне нужен способ ожидания, пока программа будет ожидать InputPanel. Будет ли создание моих собственных тем жизнеспособной альтернативой?