首页 > 解决方案 > 带有 Swingworker 的 JProgressBar

问题描述

我有一个客户端服务器程序,客户端从服务器请求(碧玉)报告并将其显示在屏幕上。报告获取部分由客户端的 Swingworker 处理,因为报告可能需要一段时间才能到达(服务器对数据库运行查询等)。

下面是我的 SwingWorker 代码:

class ReportFetcher extends SwingWorker<JasperPrint, Void> {        
    private String reportName;        
    public ReportFetcher (String reportName) {
        this.reportName = reportName;
    }

    @Override
    protected JasperPrint doInBackground() {
        SocketClient client = new SocketClient(serverAddress, 9999);
        client.sendSignal("Report-" + reportName);
        JasperPrint print = null;
        try {
           print = client.getReport();
           System.out.println("Report fetched : " + reportName);
        } catch (Exception ex) {
           ...            
        }
        client.close();
        return print;       
    }

    @Override
    protected void done()  {
        JasperViewer jv = null;
        try {
             jv = new JasperViewer(get(), false);
        } catch (Exception e) {
            ...
        }
        if (jv != null) {
            jv.setTitle(reportName);
            ...
            jv.setVisible(true);
        }                     
    }      
}

在上面的代码中,客户端的整个耗时代码只是一个方法调用print = client.getReport(); 那么在这种情况下是否可以使用进度条?(即因为没有中间的进展迹象)?有什么建议么 ?

标签: javaswingjasper-reportsswingworkerjprogressbar

解决方案


推荐阅读