gpt4 book ai didi

java - 查看不同步更新

转载 作者:行者123 更新时间:2023-12-02 13:22:04 25 4
gpt4 key购买 nike

在进一步讨论之前,这是我的 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 图形还很陌生。知道我哪里可能出错吗?

谢谢!

最佳答案

UI 线程中长时间运行的任务将锁定 UI,并且在其完成之前不会更新任何内容。您必须使用后台线程。

由于您阻塞了 SWT readAndDispatch 循环,因此即使您在长时间运行的代码启动之前完成的操作也可能不会发生,直到代码结束为止,因为它们依赖于调度循环。

您可以仅使用普通的Thread 作为后台代码,也可以使用Eclipse Job。作业允许您更新报告工作进度的“进度监视器”。

在后台线程中,您可以使用 DisplayasyncExecsyncExec 方法在 UI 线程中运行代码。

有关更多详细信息,请参阅Eclipse Jobs and Background Processing

关于java - 查看不同步更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43525104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com