0

ウィンドウビルダーを使用してJavaアプリケーションのインターフェースを設計しています。私がしなければならないことは.. ボタンをクリックすると、2 つのことが行われます。これを達成するにはマルチスレッドが必要であることはわかっています。

いくつかのチュートリアルの助けを借りてみましたが、これを実装できませんでした。

誰でも助けることができますか?

コード:プログレスバーウィンドウを開きたい場所からの関数

public void mouseDown(MouseEvent e) {
pbar p=new pbar();
p.caller();
dowork();

p.closeprogress();

}

プログレスバー クラス

import org.eclipse.swt.widgets.Display;


public class pbar {

protected Shell shell;

public void pcaller() {
    try {
    //System.err.println("Error: " + bod);


//System.err.println("Error: " + lines);
        pbar window = new pbar();
        window.open();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * Open the window.
 */
public void open() {
    Display display = Display.getDefault();
    createContents();
    shell.open();
    shell.layout();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
}

/**
 * Create contents of the window.
 */
protected void createContents() {
    shell = new Shell();
    shell.setSize(315, 131);
    shell.setText("Updating!!! Please Wait");

    ProgressBar progressBar = new ProgressBar(shell, SWT.INDETERMINATE);
    progressBar.setBounds(47, 34, 195, 17);
//  ProgressBar pb2 = new ProgressBar(shell, SWT.HORIZONTAL | 

SWT.INDETERMINATE);
   // pb2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
}

public void close()
{
    shell.close();
}
}

p.caller() を呼び出すと、進行状況バーが表示されます。その後、元のプログラムに制御が移って dowork() メソッドを実行します。このメソッドが完了すると、p.progress.close() が呼び出されます。この単純なプログラムを理解していない理由がわかりません。答えるのを忘れてください。

4

2 に答える 2

4

JFace の使用は許容されますか? その場合は、ProgressMonitorDialog クラスを使用できます。

ProgressMonitorDialog dialog = new ProgressMonitorDialog(parent.getShell());
dialog.run(true, true, new SomeTask());

...

class SomeTask implements IRunnableWithProgress {

    @Override
    public void run(IProgressMonitor monitor) throws InvocationTargetException,
            InterruptedException {
        monitor.beginTask("Doing some task", IProgressMonitor.UNKNOWN);
        for(int i = 0; i < 1000; i++) {
            if (!monitor.isCanceled())
                Thread.sleep(10);
        }

        monitor.done();
    }
}

ここで完全な使用例を見つけることができます。

于 2012-07-03T11:32:30.787 に答える
0

使ってみて.....

JProgressBar p = new JProgressBar();
p.setStringPainted();

ここで、値を設定する必要があります。

 p.setValue(val);

完了時にメッセージを表示します。

p.setString("done");
于 2012-07-03T12:02:34.187 に答える