2015-05-22 75 views
1

我想要做的是显示约15秒的进度条,关闭对话框,获得一个ftp回复并将回复显示给用户。下面是我的一些代码:Java - Swing;进度条

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错误,说的方式“软件导致连接中止:套接字写入错误。” 但是,如果我在bw.execute()后面显示消息对话框;

JOptionPane.showMessageDialog(null, "something", "Job Output", 
        JOptionPane.INFORMATION_MESSAGE); 

并保留该对话框,直到执行BackgroundWorker中的JOptionPane,它一切正常。进度条对话框关闭,新的JOptionPane显示正确的ftp回复,但第一个带有“something”文本的JOptionPane会一直保留到用户关闭它。

我的猜测是它与模式对话框没有连接到任何父框架,但我不知道如何绕过它。

+0

我们不确定如何在没有看到您的问题的短期自包含**可运行**示例的情况下为您提供帮助。 –

+1

是的,这是我的担忧,我知道如果不能“看到”问题就很难回答问题。当我回家时,我会尝试编辑这个以包含可运行样本。我担心的是,如果我缩小尺寸,它可能不会起到相同的作用,但我想也许我会弄清楚。感谢您的回复! – krzasteka

+0

“*我担心的是,如果我缩小尺寸,它可能不会起到相同的作用,但我想也许我会弄清楚。”这就是要点。 – user1803551

回答

0

我是想帮不理解整个代码和其中的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); 
    }    
} 

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

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