gpt4 book ai didi

java - 控制 Java 中函数的顺序

转载 作者:行者123 更新时间:2023-12-02 04:36:34 25 4
gpt4 key购买 nike

我有这样的东西:

final JButton btnGenerate = new JButton("Generate Keys");
btnGenerate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
//On click, Generate Keys
toConsole("[RSA] Generating a pair of keys, this can take several minutes...");
GenerateKeys();
toConsole("[RSA] Done");
btnGenerate.setEnabled(false);
btnConnect.setEnabled(true);
}
});

到控制台:

public void toConsole (String s) {
chatArea.append(s + "\n");
}

生成 key :

public void GenerateKeys(){
try {
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(4096);
KeyPair keyPair = keyGen.genKeyPair();
publicKey = keyPair.getPublic().getEncoded();
privateKey = keyPair.getPrivate().getEncoded();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}

因此,当用户按下按钮时,我尝试生成一对长度为 4096 的 RSA key ,但在此之前我想将以下内容附加到我的 TextArea:

“[RSA] 生成一对 key ,这可能需要几分钟...”

当我运行程序并单击该按钮时,TextArea 上什么也没有出现,而是程序开始生成一对键,然后在 TextArea 上打印文本。我的代码有问题吗?我先调用了toConsole(),然后调用了GenerateKeys()...

最佳答案

您必须了解 Swing 在它使用的同一线程中管理每个事件,以便重新绘制 GUI 元素。

将这两件事解耦的一种可能方法是将冗长的任务封装到 SwingWorker 中。您可以将这个任务放入 Swing 管理的线程池中,该任务甚至能够随其进度更新 GUI。

https://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html

另一种可能的方法是用您的任务弹出一个新线程,并使用invokeLater从那里更新您的GUI

http://www.javamex.com/tutorials/threads/invokelater.shtml

这将是最简单的一个。希望这有用!

关于java - 控制 Java 中函数的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30673400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com