【问题标题】:MultiThreading in java, I want both UI and code to execute in paralleljava中的多线程,我希望UI和代码并行执行
【发布时间】:2013-04-29 06:55:46
【问题描述】:

我有一个带有进度条的JFrame,我的代码应该在后台运行它,显示进度条的进度。

我在我的 Progressbar 类中实现了 runnable 并启动了线程。但是进度条框架没有显示完整..它卡住并在我的代码完全执行后显示完整,即在主线程关闭之后。

我知道这是一些基本错误。

public class ProgressScriptUI extends JFrame implements Runnable{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        setTitle("Progressing to Generate DDL Scripts");
        setBounds(400, 250, 850, 400);
        getContentPane().setLayout(null);
        JProgressBar progressBar= new JProgressBar(0,100);
        progressBar.setBounds(200, 100, 500, 20);
        add(progressBar);
        setVisible(true);

        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

}

//I am calling the below code in some other class
ProgressScriptUI progress = new ProgressScriptUI();


Thread uiThread = new Thread(progress);                                             
uiThread.start();
oracleValidateOLDorNEW.execute(); //Code that I need to call in back ground

【问题讨论】:

  • public class ProgressScriptUI extends JFrame implements Runnable{ @Override public void run() { // TODO 自动生成的方法 stub setTitle("Progressing to Generate DDL Scripts"); setBounds(400, 250, 850, 400); getContentPane().setLayout(null); JProgressBar 进度条 = 新的 JProgressBar(0,100); progressBar.setBounds(200, 100, 500, 20);添加(进度条);设置可见(真);设置可见(真);设置默认关闭操作(EXIT_ON_CLOSE); } }
  • 您可以编辑您的帖子并将代码粘贴到那里

标签: java multithreading swing event-dispatch-thread jprogressbar


【解决方案1】:

所有 UI 代码都必须在事件调度线程的上下文中执行。这使得在后台执行工作同时保持 UI 处于最新状态变得有点棘手。

查看Concurrency in Swing 以获得解决方案的建议和建议。

可能最简单的方法是使用SwingWorker,它具有publish/process 数据的功能,以便将其同步回 EDT 以及进度回调

你可以看看

举个例子……

【讨论】:

    【解决方案2】:

    我相信您正在使用 Swing 作为 UI。将SwingWorkers 用于任何长时间运行的任务。

    【讨论】:

      猜你喜欢
      • 2017-09-28
      • 2012-02-27
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      相关资源
      最近更新 更多