java - JProgressBar 在 Try-catch 完成之前不会启动

标签 java api try-catch gson jprogressbar

我正在编写一个使用 Random.ORG api 的程序。当我单击计算按钮时,JProgressBar 在操作完成后立即启动并保持卡住状态直到这一刻。

我尝试了额外的 try-catch 子句、if 语句和 boolean 门。它们都不起作用,我该如何解决?

kazananiBelirleButon.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                progressBar.setVisible(true);
                progressBar.setIndeterminate(true);

                try {

                    HashMap<String, Object> randoms = randSonuc.generateSignedIntegers(5, 0, 10);
                    System.out.println(randoms.toString());
                    String test = randoms.toString().substring(randoms.toString().indexOf("{r")+1, randoms.toString().indexOf(", da")).replace("random=", "{\"random\":") + "}";


                    System.out.println(tarihiYazdir(test,14));
                    cekilisTarihiTextPane.setText(tarihiYazdir(test,2).toString());
                    sonucPane.setText("\n"+sonuclariYazdir(test,0));



                } catch (RandomOrgSendTimeoutException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } catch (RandomOrgKeyNotRunningError e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } catch (RandomOrgInsufficientRequestsError e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } catch (RandomOrgInsufficientBitsError e1) {
                    System.out.print("lol");
                    e1.printStackTrace();
                } catch (RandomOrgBadHTTPResponseException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } catch (RandomOrgRANDOMORGError e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } catch (RandomOrgJSONRPCError e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } catch (MalformedURLException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
        });

最佳答案

Swing 是单线程的。调用监听器、绘制/更新 UI 都发生在称为 Event Dispatch Thread 的单个线程上(美国东部时间)。

由于您在事件处理程序代码中完成了所有工作,因此在您从方法 (actionPerformed()) 返回之前,Swing UI 无法更新。

阅读本教程:Concurrency in Swing

您应该做的是在单独的线程中完成耗时的工作,并且只在 EDT 中执行短任务(例如 UI 更新)。

另请查看 SwingWorker旨在在后台线程中执行冗长的 GUI 交互任务的类。

关于java - JProgressBar 在 Try-catch 完成之前不会启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28346293/

相关文章:

Java-Spring-JSP 下载 xls 文件 - POST 正常,GET 不起作用

java - 如何在 freemarker 中使用 roundingMode?

java - 在 PHP 中运行 java ".class"

java - 如何在放心地实现 get 请求时设置特定条件的等待

error-handling - 如何隐藏COM错误?

java - 如何从用户处获取Uuid

node.js - PUBG 移动 api - 是否存在任何返回用户信息的 pubg 移动 api

python - 从 Django Rest Framework 响应中删除空字段

java - 我可以在 catch 语句中使用 Scanner

java - 从 try 资源结构返回 Future