Java-Swing;进度条

Java-Swing;进度条,java,swing,progress-bar,joptionpane,swingworker,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.setT

我想做的是显示一个进度条约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);
        }            
    }
在BackgroundWorker中的JOptionPane被执行之前,将对话框保持打开状态,一切正常。当进度条对话框关闭时,新的JOptionPane会显示正确的ftp回复,但是带有“某物”文本的第一个JOptionPane会一直保留,直到用户关闭它


我的猜测是,这与对话框是模态的,并且没有连接到任何父框架有关,但我不确定如何绕过它。

我试图在不理解整个代码的情况下提供帮助,FTP连接在哪里工作。。。但让我们尝试改变:

dialog.dispose()

作者:

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);
    }            
}
公共类BackgroundWorker扩展SwingWorker{。。。
@凌驾
受保护的void done(){
如果(对话框!=null){
System.out.println(“jobNum:+jobNum”);
jobOutput=ftpClient.getJobSysOut(jobNum,true);
dialog.dispose();
System.out.println(“jobOutput:+jobOutput”);
System.out.println(“”);
JTextArea textArea=新的JTextArea(作业输出);
JScrollPane scrollPane=新的JScrollPane(textArea);
textArea.setLineWrap(false);
textArea.setWrapStyleWord(true);
scrollPane.setPreferredSize(新维度(1000500));
setFont(新字体(“Courier new”,Font.PLAIN,12));
showMessageDialog(tf,滚动窗格,“作业输出”,
JOptionPane.INFORMATION(信息和消息);
}            
}
Dispose()方法正在释放资源,可能会关闭套接字或其他类型的FTP连接


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

如果您没有看到您的问题的简短、独立、可运行的示例,我们不确定如何帮助您。是的,这是我所关心的问题,我知道在无法“看到”的情况下很难回答问题问题是。我回家后会尝试编辑此内容,以包含一个可运行的样本。我担心如果我缩小尺寸,它可能会表现不一样,但我想也许到时候我会发现它。谢谢你的回答!“我担心如果我缩小尺寸,它可能会表现不一样,但我想也许到时候我会发现它。”这就是重点。
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);
    }            
}