在制作程序的GUI时遇到了一些问题。后端程序运行正常,但有时需要一段时间才能完成。
在GUI中,我想向用户显示工作已经完成,并认为不确定的JProgressBar
(进度)就足够了-它不确定,因为我只想要一个指示正在发生的事情,而实际上并没有遵循进展。条形图已经被添加到框架中,因此它始终存在,并且在单击按钮并开始处理时才被隐藏。
该过程完成后,应将其重新隐藏。我还输入了一些文字,这些文字也应显示该进程正在运行,然后在运行后将其更改为完成的位。
但是,它没有按预期工作。似乎正在发生的事情是代码似乎以错误的顺序执行。 c.run()
指令似乎在setVisible(true)
之前执行,因为进度条仅在run命令完成后才出现,我不知道为什么。 run()
命令是一个相当大的操作,需要花费一些时间(它只是一个单线程应用程序),但是我不知道为什么会这样做,因为当您使用print时,代码肯定以正确的顺序运行调试以查看哪些指令按哪个顺序运行。
but.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
runCSVReader(e);
}
});
private void runCSVReader(ActionEvent evt) {
progress.setVisible(true);
label8.setForeground(Color.YELLOW);
label8.setText("Processing...");
correctInput();
String accTypes = tf5.getText() + "\\" + tf6.getText() + ".csv";
String inputFile = tf.getText() + "\\" + tf4.getText() + ".csv";
String outputFile = tf7.getText() + "\\" + tf2.getText();
System.out.println("acctypes " + accTypes+"\ninput " + inputFile + "\noutput " + outputFile);
try {
csvreader c = new csvreader();
c.setAccTypesFile(accTypes);
c.setInputFile(inputFile);
c.setOutputFile(outputFile);
c.run();
// progress.setVisible(false);
label8.setForeground(Color.GREEN);
label8.setText("Complete");
//pb.end();
}
这很奇怪,因为代码似乎按顺序运行
c.run();
progress.setVisible(true);
label8.setForeground(Color.YELLOW);
label8.setText("Processing...");
// progress.setVisible(false);
label8.setForeground(Color.GREEN);
label8.setText("Complete");
,因为文本直接变为绿色完成消息(仅在很短的时间内显示黄色消息),并且(未注释时)setvisible直接变为false。 知道为什么会这样吗?据我所知,被调用的方法中没有任何冲突的调用会影响到这一点。 是否是因为它是单线程程序,所以直到主线程没有run()命令后进度条才会显示;如果是这样,为什么在第一次调用该文本时它也似乎没有运行?