Eclipse插件开发中的问题一

  问题描述:

最近在Eclipse插件开发中遇到这样的问题,我使用如入扩展点

< extension
       
point ="org.eclipse.debug.ui.launchConfigurationTabs" >
    
< tab
          
class ="com.example.launch.SqlDebugTab"
          group
="org.eclipse.jdt.debug.ui.launchConfigurationTabGroup.localJavaApplication"
          id
=" com.example.launchs.SqlDebugTab"
          name
="SqlDebugTab" >
       
< associatedDelegate
             
delegate =" com.example.launch.SqlDebugLaunchDelegate" >
       
</ associatedDelegate >
    
</ tab >
 
</ extension >

< extension
          
point ="org.eclipse.debug.core.launchDelegates" >
       
< launchDelegate
             
delegate =" com.example.launch.SqlDebugLaunchDelegate"
             id
=" com.example.launch.SqlDebugLaunchDelegate"
             modes
="debug"
             type
="org.eclipse.jdt.launching.localJavaApplication" >
       
</ launchDelegate >
    
</ extension >

 

也就是在调式Java Application的对话框中,增加一个Tab页,Tab页的名字为SqlDebugTab,在这个Tab页上增加几个复选框,复选框要显示视图的名称,如果用户选择某个复选框,点“Debug”后,将显示指定的视图,可是在com.example.launch.SqlDebugLaunchDelegate类中的launch方法中调用PlatformUI.getWorkbench().getActiveWorkbenchWindow(),得到的对象却为null,调试程序才发现,运行com.example.launch.SqlDebugLaunchDelegate类是,走的是新线程,也就是说点“Debug”按钮时,Eclipse平台启动的是新的线程(非UI线程),而在新线程中是取不到ActiveWorkbenchWindow对象,为了解决这个问题,花费了很多时间,最后终于找到解决方法,launch方法通过如下程序来显示视图,就可以解决上面遇到的问题:

PlatformUI.getWorkbench().getDisplay().asyncExec( new  Runnable()  {
            
public void run() {
                IWorkbenchWindow window 
= PlatformUI.getWorkbench()
                        .getActiveWorkbenchWindow();
                
if (window != null){
                    window.getActivePage().showView(
"……");
}

}

}



你可能感兴趣的:(Eclipse插件开发中的问题一)