Java-Swing;进度条
我想做的是显示一个进度条约15秒,关闭对话框,获得ftp回复,并向用户显示该回复。以下是我的一些代码: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
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);
}
}