Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JProgressBar在某些条件下更新Java小程序_Java_Swing_Applet_Swingworker_Jprogressbar - Fatal编程技术网

JProgressBar在某些条件下更新Java小程序

JProgressBar在某些条件下更新Java小程序,java,swing,applet,swingworker,jprogressbar,Java,Swing,Applet,Swingworker,Jprogressbar,我有一种情况,需要根据以不同方法执行的某些逻辑更新ProgressBar。我正在使用SwingWorker创建ProgressBar 以下是迄今为止开发的代码片段: public class ProgressApplet extends JApplet implements ActionListener,PropertyChangeListener{ JProgressBar jp; JPanel content; JButton jb; JTextField jt; Task task; J

我有一种情况,需要根据以不同方法执行的某些逻辑更新ProgressBar。我正在使用SwingWorker创建ProgressBar

以下是迄今为止开发的代码片段:

public class ProgressApplet extends JApplet implements ActionListener,PropertyChangeListener{

JProgressBar jp;
JPanel content;
JButton jb;
JTextField jt;
Task task;
JTextArea ja;

class Task extends SwingWorker
{

    @Override
    protected Object doInBackground() throws Exception {

        int progress = 0;
        setProgress(0);
        while (progress < 1000) 
        {
            try 
            {
              Thread.sleep(100);
            } catch (InterruptedException ex) {
                jt.setText(""+ex);
            }
            progress += 10;
            setProgress(progress);
            jt.setText(""+task.getProgress());
          }
          return null;
    }

    @Override
    public void done() {
      //Toolkit.getDefaultToolkit().beep();
      jb.setEnabled(true);
      setCursor(null); 
    }
}

public void init()
{
    content = new JPanel();
    content.setLayout(null);
    jt=new JTextField();
    jb=new JButton("Start");

    jp = new JProgressBar();

    jb.setBounds(30, 80, 100, 30);
    jp.setBounds(30, 140, 120, 30);
    jt.setBounds(30,200,100,30);
    jp.setStringPainted(true);
    //ja.setBounds(30, 250, 100, 200);

    content.add(jb);
    content.add(jp);
    content.add(jt);
    //content.add(ja);
    jb.addActionListener(this);
    jp.setVisible(false);
    this.add(content);
}

@Override
public void actionPerformed(ActionEvent e) 
{


    if(e.getSource() == jb )
    {
        jp.setVisible(true);
        //jt.setText(""+progress);

        jb.setEnabled(false);
        //jp.setVisible(true);
        setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

        task = new Task();
        task.addPropertyChangeListener(this);
        task.execute();

    }
    // TODO Auto-generated method stub

}

@Override
public void propertyChange(PropertyChangeEvent evt) 
{

    if ("progress" == evt.getPropertyName()) {
          int progress1 = (Integer) evt.getNewValue();
          jp.setValue(progress1);

         // ja.append(String.format("Completed %d%% of task.\n", task
            //          .getProgress()));
        }

}

public static void main(String[] args)
{
    ProgressApplet pa=new ProgressApplet();
}
} 
公共类ProgressApplet扩展了JApplet,实现了ActionListener、PropertyChangeListener{
JProgressBar jp;
JPanel内容;
按钮;
JTextField-jt;
任务;
jtextja区;
类任务扩展SwingWorker
{
@凌驾
受保护对象doInBackground()引发异常{
int progress=0;
setProgress(0);
而(进度<1000)
{
尝试
{
睡眠(100);
}捕获(中断异常例外){
jt.setText(“+ex”);
}
进展+=10;
设定进度(进度);
jt.setText(“+task.getProgress());
}
返回null;
}
@凌驾
公众假期结束(){
//getDefaultToolkit().beep();
jb.setEnabled(真);
设置光标(空);
}
}
公共void init()
{
content=newjpanel();
content.setLayout(空);
jt=新的JTextField();
jb=新的JButton(“开始”);
jp=新的JProgressBar();
jb.立根(30,80,100,30);
jp.setBounds(30,140,120,30);;
jt.立根(30200100,30);
jp.SetStringPaint(真实);
//ja.挫折(30、250、100、200);
内容。添加(jb);
content.add(jp);
内容。添加(jt);
//内容.添加(ja);
jb.addActionListener(本);
jp.setVisible(假);
增加(内容);
}
@凌驾
已执行的公共无效操作(操作事件e)
{
如果(例如getSource()==jb)
{
jp.setVisible(真);
//jt.setText(“+进度);
jb.setEnabled(false);
//jp.setVisible(真);
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_Cursor));
任务=新任务();
task.addPropertyChangeListener(此);
task.execute();
}
//TODO自动生成的方法存根
}
@凌驾
公共作废属性更改(属性更改事件evt)
{
if(“progress”==evt.getPropertyName()){
int progress1=(整数)evt.getNewValue();
jp.设定值(进度1);
//ja.append(String.format)(“已完成%d%%的任务。\n”,任务
//.getProgress());
}
}
公共静态void main(字符串[]args)
{
ProgressApplet pa=新的ProgressApplet();
}
} 
上面的代码包含一个正常的虚拟循环,该循环当前正在更新progressbar。 现在我有了一个方法,比如performwork类似于下面的代码,它包含了我需要更新progreesbar的逻辑

public void performwork(ArrayList<String> aa)
{
      //some code
      int i=0;
      while(i<aa.size())
      {
             //some code logic
             //progress bar to be updated based on logic written here
      }
}
public void performwork(ArrayList aa)
{
//一些代码
int i=0;
虽然(i您的意思类似。了解
SwingWorker
提供给您的内容,它提供了一种将工作线程中的信息发送回EDT的方法,以便您可以安全地更新UI。您的意思类似。了解
SwingWorker
提供给您的内容,它提供了一种从工作线程中发送信息的方法返回EDT,以便安全地更新UI