| ||||
| ||||
есть тестовое приложение. два класса Main (основной класс) и NewJFrame (для графического UI). При вызове функции генерации из класса Main - все нормально, генерится. При вызове функции генерации из класса NewJFrame - зависает генератор на Инициализации ДСЧ. В чем может быть трабл? | ||||
Ответы: | ||||
| ||||
При любом использовании графических форм зависает Биологический ДСЧ. | ||||
| ||||
так все-таки, в чем может быть проблема? | ||||
| ||||
Обратит кто-нибудь внимание на этот пост?!! | ||||
| ||||
Попробуйте создавать ключи не в обработчиках событий. Код, в котором ключи создает отдельная нитка, ожидающая выполнения условия, а условие создается в обработчике нажатия графической кнопки, работает. | ||||
| ||||
Есть ли возвожность привести пример кода? | ||||
| ||||
/* * класс создает одну нитку, в которой будет сделан ключ по нажатию кнопки. */ public class BioFrameTest implements PageInterface { ... переменные, описывающие создаваемую панель. /*кнопка, по нажатию которой создается ключ*/ private JButton randGen; /*нитка создания ключей*/ private Thread mutThread; /*объект для синхронизации */ private final Object object = new Object(); /*признак остановки*/ boolean whenstop = false; /* класс нитки */ private class Startkey implements Runnable { boolean fin = false; public void run() { /*висим в цикле*/ while (!fin) { /*проверяем, не попросили ли нас сделать ключ, под синхронизацией*/ synchronized (object) { if (whenstop) { try { Provider p = Security.getProvider("JCP"); KeyPairGenerator keyGen = KeyPairGenerator.getInstance(JCP.GOST_DEGREE_NAME, p); KeyPair pair = keyGen.generateKeyPair(); PrivateKey priv = pair.getPrivate(); PublicKey pub = pair.getPublic(); } catch (NoSuchAlgorithmException e1) { e1.printStackTrace(); } fin = true; } } } } } /** * Конструктор закладки контрольной панели. */ public BioFrameTest() { .... - создание окна с кнопкой randGen. /*создаем и запускаем нитку*/ mutThread = new Thread(new Startkey()); mutThread.start(); /*вешаем обработчик на кнопку, просящий создать ключ, но самостоятельно ключ не создающий*/ randGen.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { synchronized (object) { /*по этой переменной создастся ключ*/ whenstop = true; } } }); } /** * Тест на страницу контрольной панели. * * @param args не используется */ public static void main(String[] args) { final BioFrameTest tst = new BioFrameTest(); MainControlPane.start(tst); } } | ||||