使用SwingWorker在GUI中添加进度条

我使用SwingWorker使用Java Swing API制作进度条。

我有一个扩展SwingWorker的类

    class Swinger extends SwingWorker {

private ClassAnalyzer classAnalyzer;

public Swinger(ClassAnalyzer classAnalyzer){

this.classAnalyzer = classAnalyzer;

}

@Override

public Void doInBackground() throws InterruptedException {

try

{

int progress = 0;

while (progress < 100) {

// at this point I make certain elaboration on classAnalyzer

progress++;

//Call the process method to update the GUI

publish(progress);

}

}

catch(InterruptedException e)

{

}

return null;

}

@Override

protected void process(List chunks) {

for (Integer chunk : chunks) {

progressBar.setValue(chunk);

//if the switchtype checkbox is selected then

//change the progressbar to a determined type

//once the progress has reached 50

if (chunk > 49)

{

if (switchType.isEnabled() && switchType.isSelected())

{

progressBar.setStringPainted(true);

}

}

}

}

}

第二节课(我正在写一篇)

 public Tester()

{

JFrame guiFrame = new JFrame();

//make sure the program exits when the frame closes

guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

guiFrame.setTitle("Creating a Table Example");

guiFrame.setSize(700,200);

//This will center the JFrame in the middle of the screen

guiFrame.setLocationRelativeTo(null);

goButton = new JButton("Go");

goButton.setActionCommand("Go");

goButton.addActionListener(new ActionListener()

{

//When the button is clicked the SwingWorker class is executed and

//the button is disabled

@Override

public void actionPerformed(ActionEvent event)

{

progressBar.setStringPainted(progressType.isSelected());

ClassAnalyzer c = new ClassAnalyzer();

Swinger task = new Swinger(c);

task.execute();

int methods = c.getNumberOfMethods();

if(methods == 0){

JOptionPane.showMessageDialogo(null, "methods not found");

}

goButton.setEnabled(false);

}

});

}

当我在第二个测试器中启动时,在进度条出现之前会显示消息“找不到方法”,而在以后的情况下我希望出现该消息。该怎么办?

回答:

task.execute()将启动一个背景(从中doInBackground调用该方法),程序将继续执行。

task.execute() 不是阻塞方法,这是使用它的原因,因此您不要阻塞事件调度线程

您可以SwingWorker使用PropertyChangeListener

final ClassAnalyzer c = new ClassAnalyzer();

Swinger task = new Swinger(c);

task.addPropertyChangeListener(new PropertyChangeListener() {

@Override

public void propertyChange(PropertyChangeEvent evt) {

if (evt.getPropertyName().equals("state") && evt.getNewValue().equals(SwingWorker.StateValue.DONE)) {

int methods = c.getNumberOfMethods();

if(methods == 0){

JOptionPane.showMessageDialogo(null, "methods not found");

}

}

}

});

task.execute();

以上是 使用SwingWorker在GUI中添加进度条 的全部内容, 来源链接: utcz.com/qa/409876.html

回到顶部