我往前走了,這裏是我的ViewPart時類:查看沒有更新同步
public class Exp extends ViewPart {
public static final String ID = "edu.bitsgoa.views.Exp"; //$NON-NLS-1$
public static Text text;
public Exp() {
}
@Override
public void createPartControl(final Composite parent) {
ScrolledComposite sc = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
Composite composite = new Composite(sc, SWT.NONE);
sc.setContent(composite);
composite.setLayout(new GridLayout(2, false));
text = new Text(composite, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL | SWT.MULTI | SWT.READ_ONLY);
text.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
Font newFont=new Font(text.getDisplay(),new FontData("Monospace",10,SWT.NATIVE));
text.setFont(newFont);
GridDataFactory.fillDefaults().grab(true, true).hint(400, 400).applyTo(text);
sc.setExpandHorizontal(true);
sc.setExpandVertical(true);
sc.setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
createActions();
initializeToolBar();
initializeMenu();
}
private void createActions() {
// Create the actions
}
private void initializeToolBar() {
IToolBarManager toolbarManager = getViewSite().getActionBars()
.getToolBarManager();
}
private void initializeMenu() {
IMenuManager menuManager = getViewSite().getActionBars()
.getMenuManager();
}
public void setFocus() {
// Set the focus
}
}
我創建這個類作爲一個控制檯,這樣我可以從我的自定義插件打印上的數據。這是我顯示在其上的數據(這可能是一個非常幼稚的做法,但工程在一定程度上):
public static void display(final String message){
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
Exp.text.append(message);
Exp.text.append("\n");
}
});
}
這種方法在一些不同的類。每當我有到控制檯上打印的東西,我稱這種方法爲:
Preparation.display("Calculating parameters...);
calculateParameters();
Preparation.display("Done");
現在的問題是,在上述三線,數據不被打印在控制檯上爲:
Calculating parameters...
(wait for some time, calculate parameters)
Done
相反,參數被首先計算,然後一切被印刷一次,如:
(wait for some time, calculate parameters)
Calculating parameters...
Done
我希望它是同步完成,如我所說的顯示方法。總的來說,我對SWT和Java圖形非常陌生。任何想法,我可能會出錯?
謝謝!
你不顯示的代碼輸出「(等待一段時間......」。它是在不同的線程?它是否使用相同的'Preparation.display() '你有沒有注意到你調用'asyncExec()'而不是'syncExec()'? –
這段代碼沒什麼特別之處,它只是運行一個可執行文件,並將結果打印到一個外部.txt文件。不是在不同的線程中運行,我只是調用一個方法我試過syncExec(),但它似乎沒有幫助。 –
你是否正在獨立線程中運行'Preparation.display'代碼?如果你正在UI線程'asyncExec'沒有用處,只會延遲一些事情。爲了得到你想要的東西,你必須在一個單獨的線程中運行計算代碼。 –