我正在研究Teamcenter RAC定制。我已经更改了一个现有的代码,该代码可以处理viewpart和jbutton。 viewpart(SWT)加载样式表渲染面板。问题是,每当我单击保存按钮(JButton)时,这都会将Teamcenter应用程序挂在执行后的活动上。 代码如下:
saveCheckOutButton.addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent paramAnonymousActionEvent )
{
final AbstractRendering sheetPanel = itemPanel.getStyleSheetPanel();
final AbstractRendering sheetPanel1 = itemRevPanel.getStyleSheetPanel();
SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground()
throws Exception
{
if(pPanel==null)
return null;
if( pPanel.isPanelSavable())
{
if(sheetPanel==null|| sheetPanel1==null)
return null;
sheetPanel.saveRendering();
sheetPanel1.saveRendering();
/*if(!sheetPanel.getErrorFlag() && !sheetPanel1.getErrorFlag())
{
sheetPanel.setModifiable( false );
sheetPanel1.setModifiable( false );
}*/
}
return null;
}
@Override
protected void done(){
if(!sheetPanel.getErrorFlag() && !sheetPanel1.getErrorFlag())
{
sheetPanel.setModifiable( false );
sheetPanel1.setModifiable( false );
}
}
};
worker.execute();
}
} );
我已经按照一些专家的建议在swingworker下编写了代码,但没有成功。请求一些即时帮助。
答案 0 :(得分:1)
“挂起teamcenter应用程序”是什么意思。它响应太慢还是doInBackground()不能正确执行?
无论如何,您都可以尝试在SwingUtilities.invokeLater()
中执行渲染代码,并使用方法get()
。如果您未在done方法中调用get(),则将丢失doInBackground()中的计算引发的所有异常。因此,我们将了解异常是否存在。
SwingUtilities.invokeLater()允许在以后的某个时间点执行任务。但更重要的是,该任务将在AWT事件分配线程上执行。有关详细信息,请参见Invoke later API documentation。
关于get():
在必要时等待计算完成,然后检索其结果。
注意:在事件调度线程上调用get会阻止所有事件(包括重绘)都被处理,直到此SwingWorker完成为止。
saveCheckOutButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent paramAnonymousActionEvent) {
final AbstractRendering sheetPanel = itemPanel.getStyleSheetPanel();
final AbstractRendering sheetPanel1 = itemRevPanel.getStyleSheetPanel();
SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
if (pPanel == null)
return null;
if (pPanel.isPanelSavable()) {
if (sheetPanel == null || sheetPanel1 == null)
return null;
saveRendering();
}
return null;
}
@Override
protected void done() {
try {
get();
if (!sheetPanel.getErrorFlag() && !sheetPanel1.getErrorFlag()) {
sheetPanel.setModifiable(false);
sheetPanel1.setModifiable(false);
}
} catch (final InterruptedException ex) {
throw new RuntimeException(ex);
} catch (final ExecutionException ex) {
throw new RuntimeException(ex.getCause());
}
}
};
worker.execute();
}
});
private void saveRendering() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
sheetPanel.saveRendering();
sheetPanel1.saveRendering();
}
});
}