Java - Swing;进度条

时间:2015-05-22 18:56:31

标签: java swing progress-bar joptionpane swingworker

我想要做的是显示一个进度条约15秒,关闭对话框,获取ftp回复并显示该回复给用户。以下是我的一些代码:

public class testFrame extends javax.swing.JFrame {...
   public test() {...
     BackgroundWorker bw = new BackgroundWorker();
     bw.setJobNum(jobN);
     bw.setFtpClient(ftpClient);
     bw.setTF(this);
     bw.execute();
   }
}

public class BackgroundWorker extends SwingWorker<Void, Void>{...
@Override
    protected void done() {
        if (dialog != null) {
            dialog.dispose();
            System.out.println("jobNum: " + jobNum);
            jobOutput = ftpClient.getJobSysOut(jobNum, true);
            System.out.println("jobOutput: " + jobOutput);
            System.out.println("");
            JTextArea textArea = new JTextArea(jobOutput);
            JScrollPane scrollPane = new JScrollPane(textArea);  
            textArea.setLineWrap(false);  
            textArea.setWrapStyleWord(true);
            scrollPane.setPreferredSize( new Dimension( 1000, 500 ) );
            textArea.setFont(new Font("Courier New", Font.PLAIN, 12));
            JOptionPane.showMessageDialog(tf, scrollPane, "Job Output",  
               JOptionPane.INFORMATION_MESSAGE);
        }            
    }

如果我按照上面编写代码的方式尝试这样做,我会得到一个ftp错误,说明&#34;软件导致连接中止:套接字写入错误。&#34; 但是,如果我在bw.execute();

之后立即显示消息对话框
JOptionPane.showMessageDialog(null, "something", "Job Output",  
                  JOptionPane.INFORMATION_MESSAGE);

并保持对话框直到执行BackgroundWorker中的JOptionPane,一切正常。进度条对话框关闭,新的JOptionPane显示正确的ftp回复,但是第一个JOptionPane带有&#34;的东西&#34;文本一直保持到用户关闭它。

我的猜测是,它与对话模式有关,而不是附加到任何父框架,但我不知道如何绕过它。

1 个答案:

答案 0 :(得分:0)

我试图帮助而不了解整个代码以及FTP连接在哪里工作......但是让我们尝试更改:

dialog.dispose();

by:

dialog.setVisible(false);

或尝试在获取FTP输出后移动dispose():

public class BackgroundWorker extends SwingWorker<Void, Void>{...
@Override
protected void done() {
    if (dialog != null) {
        System.out.println("jobNum: " + jobNum);
        jobOutput = ftpClient.getJobSysOut(jobNum, true);
        dialog.dispose();
        System.out.println("jobOutput: " + jobOutput);
        System.out.println("");
        JTextArea textArea = new JTextArea(jobOutput);
        JScrollPane scrollPane = new JScrollPane(textArea);  
        textArea.setLineWrap(false);  
        textArea.setWrapStyleWord(true);
        scrollPane.setPreferredSize( new Dimension( 1000, 500 ) );
        textArea.setFont(new Font("Courier New", Font.PLAIN, 12));
        JOptionPane.showMessageDialog(tf, scrollPane, "Job Output",  
           JOptionPane.INFORMATION_MESSAGE);
    }            
}

Dispose()方法释放资源,可能会关闭套接字或其他类型的FTP连接。

如果您可以编辑示例并对其进行扩展,那么我们将有助于重现该问题并帮助您解决问题。