Статус: Участник
Группы: Участники
Зарегистрирован: 02.02.2011(UTC) Сообщений: 10 Откуда: Москва
|
В текущей реализации JCP окошко графического ДСЧ наследует JFrame, а это значит, что когда приложение вызывает генерацию ключа из модального окна-наследника JDialog, окно ДСЧ появляется под модальным окном и фокус не полуает. Кроме того, похоже ДСЧ иногда некорректно работает с EDT - валится EDT Rule violation exception. Нельзя ли использовать для него модальный диалог (JDialog), или же предусмотреть возможность подключить собственную реализацию подобного окна?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 09.10.2008(UTC) Сообщений: 181
|
Подключить собственную реализацию это маловероятно. Давно уже была попытка показать это окно и разрешить его вставлять. Очень скоро появился желающий "накормить" это окно сообщениями, чтоб пользователю не надо было ничего нажимать. Лазейку сразу прикрыли. Наличие биологической случайности важно при генерации пользовательского ключа, делать тут дыру не хочется. Менять на JDialog сейчас значит потерять совместимость с теми, кто уже встроился и использует окно с JFrame. Думаете не появятся предложения вернуть все назад? Надо придумать возможность мирного сосуществования. Создание пользовательского ключа весьма редкая операция. Может можно обойтись простым вариантом?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 02.02.2011(UTC) Сообщений: 10 Откуда: Москва
|
Нас устроит вариант, аналогичный решению с look&feel: сделайте, чтобы, например, при выставлении System.setProperty("ru.CryptoPro.JCP.ControlPane.useJDialog","true") использовался JDialog. Если же параметр не выставлен, будет работать старый вариант с JFrame.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 02.02.2011(UTC) Сообщений: 10 Откуда: Москва
|
Можно надеяться, что подобная возможность появится в ближайших версиях?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 09.10.2008(UTC) Сообщений: 181
|
Не знаю. Простая замена на JDialog не работает, я попробовал, виснет. Если потребуется значительная переделка схемы, то нужен будет анализ какой-то, отсутствие негативного влияния и прочее.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 02.02.2011(UTC) Сообщений: 10 Откуда: Москва
|
Вешается, видимо, из-за неправильной работой со свинговой нитью. Насколько я знаю, обычно делается так: Если вызов функции (например, генерации ключа) происходит из свинговой нити (SwingUtilities.isEventDispatchThread()==true), напирмер, если вызов происходит напрямую из обработчика кнопки на форме, тогда можно смело брать JDialog, вызывать его show который будет блокировать нить заставляя пользователя делать ввод в диалог, при этом проблем с прорисовкой тоже не будет, так как модальный show будет нормально пропускать все события не касающиеся пользовательского ввода соответствующим компонентам. Если же вызов делается не из свинговой нити (SwingUtilities.isEventDispatchThread()==false), тогда при необходимости получить пользовательский ввод, в очередь свинговых событий нужно поставить вызов своего диалога и дальше ждать пока диалог не отработает. Примерно так: Код:
final Object lock = new Object();
synchronized (lock) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
final JDialog dialog = new JDialog((Frame) null, null, true);
dialog.setVisible(true); // Блокируется до тех пор пока диалог не будет закрыт
synchronized (lock) {
lock.notify();
}
}
});
lock.wait();
}
// Сюда попадаем только после того как пользовательский диалог будет так или иначе закрыт
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close