我有很多重复行的代码如下所示。如何将其作为方法?
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
....
}
});
答案 0 :(得分:1)
好的,为了让这个更加突出,让我发一个答案:
你所拥有的代码尽可能短,因为你可以传递给方法的唯一东西是变量或标量。
对于您对Display#asyncExec(Runnable)
的所有通话都相同的特殊情况,您可以执行以下操作:
public class MyClass implements Runnable
{
public void myMethod()
{
/* Your other code here */
Display.getDefault().asyncExec(this);
}
@Override
public void run()
{
/* Update the GUI here */
}
}
另一种替代方法是为每个GUI更新目的创建类,每个实现Runnable
:
public class GuiUpdaters
{
public static class TableViewerUpdater implements Runnable
{
@Override
public void run()
{
/* Update your TableViewer here */
}
}
public static class StatusBarUpdater implements Runnable
{
@Override
public void run()
{
/* Update your Status bar here */
}
}
}
你可以这样称呼它们:
/* Update the TableViewer */
Display.getDefault().asyncExec(new TableViewerUpdater());
/* Update the status bar */
Display.getDefault().asyncExec(new StatusBarUpdater());
答案 1 :(得分:0)
当不需要参数时,您还可以创建绘图例程的单个实例:
final Runnable tableDrawer = new Runnable()
{
@Override
public void run()
{
/* Update your TableViewer here */
}
};
然后在代码中,只需使用:
Display.getDefault().asyncExec(tableDrawer);
一些优化方法:如果您已经在displaythread中,可以自己调用run方法 - 否则,运行asyncExec。
您可以创建一个帮助程序类来运行这些类型的任务。帮助程序类可以检查您是否进入显示线程,跟踪绘图例程的使用次数,并在绘图任务执行时间过长时提醒您。 (超过1000毫秒的任何东西都可能不是一件好事,应该包含在进度对话框中。)
如果您正在进行大量GUI更新,请对它们进行分组,以便在单个绘图“runnable”事件中尽可能多地执行此操作。例如,如果您正在向控制台绘制文本行,请不要为每行文本绘制一行,而是使用需要绘制的ArrayList行..然后在list.size时触发绘制()== 1。当要显示许多文本行时,加速将是戏剧性的。