我正在从事 Teamcenter RAC 定制工作。我更改了处理 View 部分和 jbuttons 的现有代码。 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 下编写了代码,但没有成功。请求立即帮助。
最佳答案
“它挂起 teamcenter 应用程序”是什么意思?是否响应太慢或者doInBackground()没有正确执行?
无论如何,您可以尝试在 SwingUtilities.invokeLater()
中执行渲染代码并使用方法 get()
。如果您不在done方法中调用get(),您将丢失doInBackground()中计算抛出的所有异常。因此我们将了解是否存在异常。
SwingUtilities.invokeLater() 允许在稍后的某个时间点执行任务,顾名思义;但更重要的是,该任务将在 AWT 事件调度线程上执行。请参阅Invoke later API documentation了解详细信息。
关于 get():
如有必要,等待计算完成,然后检索其结果。
注意:在事件分派(dispatch)线程上调用 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();
}
});
}
关于swing - 单击 JButton 时 ViewPart 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51238804/