JProgressbar没有显示并且代码执行顺序错误?

时间:2018-08-30 14:02:57

标签: java swing user-interface event-dispatch-thread jprogressbar

在制作程序的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()命令后进度条才会显示;如果是这样,为什么在第一次调用该文本时它也似乎没有运行?

0 个答案:

没有答案