我想要做的是显示一个进度条约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;文本一直保持到用户关闭它。
我的猜测是,它与对话模式有关,而不是附加到任何父框架,但我不知道如何绕过它。
答案 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连接。
如果您可以编辑示例并对其进行扩展,那么我们将有助于重现该问题并帮助您解决问题。