当前位置: 首页 > 知识库问答 >
问题:

当“开始”按钮被点击时,我如何使我的进度条运行?

仲孙善
2023-03-14

我当前正在尝试将进度条插入到我的Java GUI中。但是,当我点击“开始”按钮时,进度条并没有运行。在cmd中运行的所有不同的批处理文件都必须完成,然后进度条才会运行。但这又有什么意义呢?我希望它运行时,“开始”按钮被按下,当所有不同的批处理文件运行在cmd结束,进度条也停止。

这是我的代码:

JLabel ProgressBar = new JLabel("Progress Bar: ");
ProgressBar.setFont(new Font("Arial", Font.BOLD, 12));
ProgressBar.setBounds(100, 285, 180, 53);
contentPane.add(ProgressBar);
final JProgressBar aJProgressBar = new JProgressBar(JProgressBar.HORIZONTAL);
aJProgressBar.setBounds(185,305,184,15);
contentPane.add(aJProgressBar);

//when start button is selected
btnStart.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent args)
    {
        //the process starts
        JStartTimeTextField.setText(dateFormat.format(date));

        //the progress bar should show it running (by right)
        aJProgressBar.setIndeterminate(true);

        try 
        {
            //create new process    
            String command = "cmd /c start /wait" +DetectDrive+"\\starting.bat";

            //run process
            Process p = Runtime.getRuntime().exec(command);

            //cause this process to stop until process p is terminated
            p.waitFor();
        } 
        catch (IOException | InterruptedException e1)
        {
            e1.printStackTrace();
        }

        ......

        Date newDate = new Date();
        JStartTimeTextField.setText(dateFormat.format(newDate));

        //the progress bar should stop running (by right)
        //aJProgressBar.setIndeterminate(false);
    }
});

所以按理说...当单击“开始”按钮时,应显示startTime,进度条应运行。但是,只有当cmd中的所有批处理文件运行完毕时,才会显示startTime。

但就目前而言,进度条是我的优先事项。我怎样才能使当“开始”按钮被点击,进度条运行,当所有完成,然后进度条停止?

给予的任何帮助将不胜感激!

共有1个答案

孙光临
2023-03-14

您正在使用同一线程更新JProgressBar并运行脚本。问题是您等待process终止(p.waitfor()),因此,线程将等待而不更新JProgressBar。正确的解决方案是使用SwingWorker。但是我认为您可以通过启动一个新的thread来运行您的SRCIPT来运行它。

类似于:

public void actionPerformed(ActionEvent args)
{
    //the process starts
    JStartTimeTextField.setText(dateFormat.format(date));

    //the progress bar should show it running (by right)
    aJProgressBar.setIndeterminate(true);
    new Thread()
    {
    public void run()
    {
    try 
    {
        //create new process    
        String command = "cmd /c start /wait" +DetectDrive+"\\starting.bat";

        //run process
        Process p = Runtime.getRuntime().exec(command);

        //cause this process to stop until process p is terminated
        p.waitFor();
    } 
    catch (IOException | InterruptedException e1)
    {
        e1.printStackTrace();
    }
    }
    }.start();   

    ......

    Date newDate = new Date();
    JStartTimeTextField.setText(dateFormat.format(newDate));

    //the progress bar should stop running (by right)
    //aJProgressBar.setIndeterminate(false);
}
 类似资料:
  • 我正在尝试动画图标在我的应用程序每当它是被点击。我实现了我想要的简单动画,但它总是动画一次后,我来到那个屏幕。我希望每次点击时,它都应该是动画,并且它应该顺时针旋转,持续时间为2秒,当再次按下时,它应该逆时针旋转,持续时间为2秒。请帮帮我 这里是代码的部分-

  • 当我在设备上运行应用程序时单击增量按钮时,我的应用程序意外地强制执行这是我的activity_main.xml代码 这是我的mainactivity.java文件 这是调试报告05-23 22:14:45.695 297 36-29736/com.orton.birthdayCard E/AndroidRuntime:致命异常:主进程:com.orton.birthdayCard,PID:2973

  • 好的,我有一个包含PDF文件数组的解析数据库,这些文件显示在我的表视图中。当用户选择一个文件时,他会被带到所选PDF的详细视图,并给出一个“下载”选项按钮。我使用相同的数组在表视图的segue上携带信息。下面是代码的样子。 我想编程这个按钮,以启动下载到个人设备,如果任何人可以帮助我。

  • 我想创建一个下拉列表和一个按钮,功能是当我点击按钮,然后按钮不是可点击的意思是禁用,它是显示,首先点击下拉列表。然后按钮是启用的。我们如何使我尝试但没有发生,我没有太多的想法。所以任何机构帮助我解决这个问题。 我试过这个jquery函数我对jquery不太了解。所以谁来帮帮我。

  • 一切正常,应用程序出现了。但当我点击任何切换按钮时,应用程序就会崩溃。 我试过了,但找不到问题。其实我的知识还不够,我是这个领域的新手。所以请帮帮我。 这是查看活动。JAVA 还有这只logcat 2020-03-18 03:16:50.407 31609-31609/? E/lpaper。wallper:运行时设置的未知位_标志:0x8000 2020-03-18 03:17:04.862 31

  • 下面是网页的HTML代码。 而且 我正在执行一个基于这样一个条件的程序:如果某个文本被显示,那么我必须点击动态按钮。如果下列条件为真 driver.findElements(by.xpath(“//div[starts-with(@id,'qwer')]//a[contains(text(),'holiday')]”); 然后我会点击页面上的所有按钮 下面是这方面的程序。运行此程序后,它将执行el