gpt4 book ai didi

Java:如何从另一个线程启动 UI 对话框,例如对于身份 validator

转载 作者:行者123 更新时间:2023-12-01 16:39:01 25 4
gpt4 key购买 nike

我的问题简而言之:我的 GUI 应用程序需要执行冗长的网络下载。下载是在单独的线程中处理的。远程站点可能需要身份验证,因此我想定义一个身份 validator 来弹出“输入您的用户名和密码”对话框。我意识到这个对话框需要从 UI 线程运行。

我确信我不是第一个这样做的人。让后台线程在 UI 线程中启动对话框并阻塞直到该对话框被关闭的最佳实践是什么?

附:后台线程非常大,并且不仅仅从网络下载文件。换句话说,目前将其转换为 SwingWorker 可能不切实际,而且无论如何,我也不确定如何从 SwingWorker 解决这个问题。

最佳答案

您需要SwingUtlities.invokeLater显示对话框,并同步/通知对象“暂停”并等待用户响应。

基本上在你的工作线程(非gui)中:

final Object obj = new Object() ; // or something to receive your dialog's answer(s)
Runnable r = new Runnable() {

void run() {
Dialog d = new Dialog() ;

Button b = new JButton("ok") ;
b.addActionListener(new ActionListener() {
void actionPerformed(ActionEvent e) {
synchronize(obj) { // can lock when worker thread releases with wait
obj.notify() ; // signals wait
}
}
}) ;

}
} ;

synchronize( obj ) {
SwingUtilites.invokeLater(r) ; // executs r's run method on the swing thread
obj.wait() ; // releases obj until worker thread notifies
}

关于Java:如何从另一个线程启动 UI 对话框,例如对于身份 validator ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6100989/

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