??xml version="1.0" encoding="utf-8" standalone="yes"?>久久精品国产99国产,亚洲精品一区中文,中文字幕一区二区精品区http://www.aygfsteel.com/wadise/category/6079.htmlzh-cnWed, 28 Feb 2007 03:57:30 GMTWed, 28 Feb 2007 03:57:30 GMT60Eclipse概括http://www.aygfsteel.com/wadise/archive/2005/12/20/24782.htmlwadisewadiseTue, 20 Dec 2005 06:12:00 GMThttp://www.aygfsteel.com/wadise/archive/2005/12/20/24782.htmlhttp://www.aygfsteel.com/wadise/comments/24782.htmlhttp://www.aygfsteel.com/wadise/archive/2005/12/20/24782.html#Feedback0http://www.aygfsteel.com/wadise/comments/commentRss/24782.htmlhttp://www.aygfsteel.com/wadise/services/trackbacks/24782.html?/SPAN>Eclipse可以启动多个javaq程Qƈ?/SPAN>javaq程的运行状况进行监控,q些都有几个主要框架合作完成

 

其中包括Q?/FONT>

 

       org.eclipse.jdt.launchQ?/SPAN>javaE序启动框架

       org.eclipse.debug.coreQ除Eclipse本nq程外,其他q程的核心运行?/SPAN>

       org.eclipse.core.runtimeQ提供对q行期的q程的监控及Runtime支持

 

?/SPAN>jdt?/SPAN>launch框架中,internal.launching包是launching包的实现

launching包中?/SPAN>AbstractVMRunnerQ是各种VM的主要基c,它将q程推入?/SPAN>Eclipse?/SPAN>debug框架Q以便在其中执行

 

VMRunner?/SPAN>run(VMRunnerConfiguration config, ILaunch launch, IProgressMonitor monitor)ҎQ?/SPAN>

?/SPAN>AbstractVMRunner的实现类中,实现其l承?/SPAN>IVMRunner?/SPAN>run(?/SPAN>)Ҏ以便生成javaq程q?/SPAN>Eclipse?/SPAN>debug框架中的IProcessq行包装Q?/SPAN>IProcess表示一?/SPAN>javaq程是以normalq行态而不是以Debug状态运行,同时启动传入?/SPAN>IProgressMonitor生成子监控器Q?/SPAN>SubProgressMonitorQ对包装后的IProcessq行监控?/SPAN>

 

真正的启动操作,则是?/SPAN>Eclispe?/SPAN>debug.core中的DebugPlugin中的execҎ?/SPAN>

也就两行代码Q?/FONT>

 

                     if (workingDirectory == null) {

                            p= Runtime.getRuntime().exec(cmdLine, envp);

                     } else {

                            p= Runtime.getRuntime().exec(cmdLine, envp, workingDirectory);

                     }

 

而其余的全都是监控?/FONT>

 

而启动的q程Q则是在launching包中?/SPAN>JavaLaunchDelegatecMQ就只有一个方?/SPAN>launchQ?/SPAN>

 

包括讄环境变量、监控器、文件目录验证等{都在这?/FONT>

声明一个空的工作区Q在命o行加?/SPAN>-data newworkspace

 

PDE(Plug-In Development Environment插g开发环?/SPAN>), JDT(Java Development Tool  Java开发工?/SPAN>)

Eclipse的层ơ结?/SPAN>:

 eclipse1.JPG

PDE:

Plugin.xml:

id属性是全局唯一的插件标识,最好用包名来表C?/SPAN>

name属性是方便人阅ȝ插g名称?/SPAN>

 

 

每个按钮背后都有一?/SPAN>Action对象提供支持Q当按钮被按下时Q这个对象就被调用。工h中的按钮被分为多个组Q每个组叫做一个动作集(action set)。如果动作要让以按钮的Ş式出玎ͼ必d其与工具栏\径相兌Q在action加入toolbarPath=”helloGroup?/SPAN>Q如果有别的动作已经攑ֈhelloGroup工具栏的栏目中时Q我们新加入的将会出现在那个按钮的旁辏V如果以前没?/SPAN>helloGroup,则会建立一?/SPAN>helloGroup工具栏栏目?/SPAN>

 eclipse2.JPG

 

Eclipse启动时会所有的插g清单文gd一个插件注册表中,为每个插件创Z个投影。此时插件本w不会被加蝲Q只加蝲它们的描qC息,调用PlatformgetPluginRegistry()Ҏ可以得到这个投׃界的内容?/SPAN>

 

动作必须实现的接口是IworkbenchWindowDelegateQ而当你要为工作台里的一?/SPAN>Java对象增加一个动作时Q你必须实现IobjectActiveDelegate接口?/SPAN>



wadise 2005-12-20 14:12 发表评论
]]>
代码生成器插件开?--生成GEF的图形编辑器(4) http://www.aygfsteel.com/wadise/archive/2005/12/19/24622.htmlwadisewadiseMon, 19 Dec 2005 05:20:00 GMThttp://www.aygfsteel.com/wadise/archive/2005/12/19/24622.htmlhttp://www.aygfsteel.com/wadise/comments/24622.htmlhttp://www.aygfsteel.com/wadise/archive/2005/12/19/24622.html#Feedback0http://www.aygfsteel.com/wadise/comments/commentRss/24622.htmlhttp://www.aygfsteel.com/wadise/services/trackbacks/24622.html在前面我们已l可以自动生成一个文件ƈ自动q入~辑状态,但是不是囑Ş界面。而我们的代码生成器用的是可视化囑Ş界面。还记得我们上一生成的那个文g后缀名吗Q对Q是.cgQ那么要使得打开后缀名ؓcg文g时进入我们自定义的编辑环境中Q只需在plugin.xml中加入:
   <extension
         
point="org.eclipse.ui.editors">

      
<editor
            
default="true"

            class
="com.hymake.hyplat.hycodegen.editor.CgEditor"
            contributorClass
="com.hymake.hyplat.hycodegen.editor.CgEditorContributor"
            extensions
="cg"-----------------q里是要~辑的文件后~?/FONT>
            icon
="icons/logo1.png"
            id
="com.hymake.hyplat.hycodegen.editor.CgEditor"
            name
="代码生成~辑?/>
   
</extension>

而CgEditor则要l承GraphicalEditorWithPaletteQ代码如下:
 1public class CgEditor extends GraphicalEditorWithPalette {
 2    private boolean
 dirty;
 3

 4    
/**
 5     * 构造函?BR> 6     */

 7    public CgEditor() {
 8        dirty = false
;
 9        setEditDomain(new DefaultEditDomain(this
));
10    }

11
12    
/**
13     * @see org.eclipse.gef.ui.parts.GraphicalEditorWithPalette#getPaletteRoot()
14     */

15    protected PaletteRoot getPaletteRoot() {
16        PaletteRoot root = new
 PaletteRoot();
17        PaletteGroup toolGroup = new PaletteGroup("代码生成?/SPAN>"
);
18        org.eclipse.gef.palette.ToolEntry tool = new
 SelectionToolEntry();
19
        toolGroup.add(tool);
20
        root.setDefaultEntry(tool);
21        tool = new
 MarqueeToolEntry();
22
        toolGroup.add(tool);
23        PaletteDrawer drawer = new PaletteDrawer("c?/SPAN>"
);
24        org.eclipse.jface.resource.ImageDescriptor descriptor =
 ImageFactory
25                .getImageDescriptor("table.gif"
);
26        CreationToolEntry creationEntry = new CreationToolEntry("新徏一个表"
,
27                "新徏一个表"new SimpleFactory(Table.class
), descriptor, descriptor);
28
        drawer.add(creationEntry);
29        descriptor = ImageFactory.getImageDescriptor("column.gif"
);
30        creationEntry = new CreationToolEntry("新徏一个行""新徏一个行"
,
31                new SimpleFactory(Column.class
), descriptor, descriptor);
32
        drawer.add(creationEntry);
33        descriptor = ImageFactory.getImageDescriptor("connection.gif"
);
34        ConnectionCreationToolEntry connxCreationEntry = new
 ConnectionCreationToolEntry(
35                "新徏一个连?/SPAN>""新徏一个连?/SPAN>"new SimpleFactory(Reference.class
),
36
                descriptor, descriptor);
37
        drawer.add(connxCreationEntry);
38
        root.add(toolGroup);
39
        root.add(drawer);
40        return
 root;
41    }

42
43

44

45    
/**
46     * @see org.eclipse.gef.ui.parts.GraphicalEditor#initializeGraphicalViewer()
47     */

48    protected void initializeGraphicalViewer() {
49    }

50
51    
/**
52     * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
53     */

54    public void doSave(IProgressMonitor monitor) {
55    }

56
57    
/**
58     * @see org.eclipse.ui.part.EditorPart#doSaveAs()
59     */

60    public void doSaveAs() {
61    }

62
63    
/**
64     * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
65     */

66    public boolean isSaveAsAllowed() {
67        return false
;
68    }

69
70}
q样出来的图如下Q?BR>editor1.JPG
接下来我们就要对q些Actionq行相应的代码编写完成指定的工作?BR>友情脓士:
   1.在构造函C一定要指定
        setEditDomain(new DefaultEditDomain(this));才能调用getPaletteRootq把视图昄出来?/FONT>

wadise 2005-12-19 13:20 发表评论
]]>
代码生成器插件开?--文g自动生成q编?3) http://www.aygfsteel.com/wadise/archive/2005/12/19/24578.htmlwadisewadiseMon, 19 Dec 2005 02:36:00 GMThttp://www.aygfsteel.com/wadise/archive/2005/12/19/24578.htmlhttp://www.aygfsteel.com/wadise/comments/24578.htmlhttp://www.aygfsteel.com/wadise/archive/2005/12/19/24578.html#Feedback0http://www.aygfsteel.com/wadise/comments/commentRss/24578.htmlhttp://www.aygfsteel.com/wadise/services/trackbacks/24578.html在上面的2中Q已l可以生成一个项目,但是如果惌生成完该目q自动{入图形编辑状态,什么办呢?
本篇讲q这个制作过E?BR>1.在Create完Project后,d一个函数用来生成指定文件ƈ自动q入~辑状态?
 1    /**
 2     * Ҏ文g名生成一个文件ƈ自动打开处之于编辑状?BR> 3     */

 4    private void doFinish(
 5        String fileName,
 6        IProgressMonitor monitor)
 7        throws CoreException {
 8        final IFile file = _newProject.getFile(fileName);
 9        try {
10            InputStream stream = openContentStream();
11            if (file.exists()) {
12                file.setContents(stream, truetrue, monitor);
13            }
 else {
14                file.create(stream, true, monitor);
15            }

16            stream.close();
17        }
 catch (IOException e) {
18        }

19        monitor.worked(1);
20        monitor.setTaskName("正在打开文gq编辑。。。?/SPAN>");
21        getShell().getDisplay().asyncExec(new Runnable() {
22            public void run() {
23                IWorkbenchPage page =
24                    PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
25                try {
26                    // ~辑该文?/SPAN>
27                    IDE.openEditor(page, file, true);
28                }
 catch (PartInitException e) {
29                }

30            }

31        }
);
32        monitor.worked(1);
33    }

2. 往文g中加入初始内容:
1    /**
2     * 向文件初始化一些内?BR>3     */

4    private InputStream openContentStream() {
5        String contents = "初始化内?/SPAN>";
6        return new ByteArrayInputStream(contents.getBytes());
7    }

x可以在生成完项目就自动q入文g~辑状态?BR>友情脓士:
    1.创徏文gQfinal IFile file = _newProject.getFile(fileName);
    2.打开q编辑文件代码:
 1        getShell().getDisplay().asyncExec(new Runnable() {
 2            public void run() {
 3                IWorkbenchPage page =
 4                    PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
 5                try {
 6                    // ~辑该文?/SPAN>
 7                    IDE.openEditor(page, file, true);
 8                }
 catch (PartInitException e) {
 9                }

10            }

11        }
);


wadise 2005-12-19 10:36 发表评论
]]>代码生成器插件开?--代码生成目框架的创?2) http://www.aygfsteel.com/wadise/archive/2005/12/17/24344.htmlwadisewadiseSat, 17 Dec 2005 04:57:00 GMThttp://www.aygfsteel.com/wadise/archive/2005/12/17/24344.htmlhttp://www.aygfsteel.com/wadise/comments/24344.htmlhttp://www.aygfsteel.com/wadise/archive/2005/12/17/24344.html#Feedback0http://www.aygfsteel.com/wadise/comments/commentRss/24344.htmlhttp://www.aygfsteel.com/wadise/services/trackbacks/24344.html阅读全文

wadise 2005-12-17 12:57 发表评论
]]>
代码生成器插件开?--Wizard向导制作(1)http://www.aygfsteel.com/wadise/archive/2005/12/17/24328.htmlwadisewadiseSat, 17 Dec 2005 03:08:00 GMThttp://www.aygfsteel.com/wadise/archive/2005/12/17/24328.htmlhttp://www.aygfsteel.com/wadise/comments/24328.htmlhttp://www.aygfsteel.com/wadise/archive/2005/12/17/24328.html#Feedback0http://www.aygfsteel.com/wadise/comments/commentRss/24328.htmlhttp://www.aygfsteel.com/wadise/services/trackbacks/24328.htmlq几天在做一个代码生成器Q顺便开发个Eclipse插g。把自己的一些开发过E记录下来以供参考。由于自己初步接触Eclipse插g开发,所以记录的东西没有什么深度。下面我们就来开发一个Wizard向导?BR>1. new一个plugin projectQ由于我们想通过代码生成目向导来新Z个项目,所以我们要用到Eclipse中的WizardcR?BR>
2. ~辑plugin.xmlQ之扩展org.eclipse.ui.newWizardsQ具体代码:
   <extension
         
point="org.eclipse.ui.newWizards">

      
<category
            
name="代码生成"

            id
="com.hymake.hyplat.hycodegen">
      
</category>
      
<wizard
            
name="生成一个空目"

            icon
="icons/1.gif"
            category
="com.hymake.hyplat.hycodegen"
            class
="com.hymake.hyplat.hycodegen.wizard.NewCodeGenWizard"
            id
="com.hymake.hyplat.hycodegen.wizard.new.project"
            project
="true" >
         
<description>
            通过向导生成一个代码生成项目框?BR>         
</description>
         
<selection
               
class="org.eclipse.core.resources.IResource">

         
</selection>
      
</wizard>
   
</extension>

q里面的category是在Eclipse的New->Project中的一个类别,例如Java或Plugin-Developmentcd。如图:
wizard1.JPG

通过点击NextQ将调用NewCodeGenWizardc,q入新徏目H体。如下图Q?BR>
wizard2.JPG

xQ我们的向导完成Q具体的代码是这LQ?BR>NewCodeGenWizardQ?BR>

 1    public void init(IWorkbench workbench, IStructuredSelection selection) {
 2        this._workbench = workbench;
 3        setNeedsProgressMonitor(true);
 4        setWindowTitle("新徏一个空目");
 5    }

 6
 7    /** 
 8     * @see org.eclipse.jface.wizard.Wizard#performFinish()
 9     */

10    public boolean performFinish() {
11        return false;
12    }

13
14    /** 
15     * @see org.eclipse.jface.wizard.Wizard#addPages()
16     */

17    public void addPages() {
18        super.addPages();
19        WizardNewProjectCreationPage page = new WizardNewProjectCreationPage("q_开?代码生成");
20        page.setTitle("创徏一个代码生成项目框?/SPAN>");
21        page.setDescription("创徏一个代码生成项目框?/SPAN>");
22        addPage(page);
23    }

q里我只是简单用Eclipse UI中的WizardNewProjectCreationPage Q如果自己想自定义下一个页面的风格和内容的话,也可以再新徏一个类l承WizardPage卛_。代码如下:
 1    public NewCodeGenWizardPage() {
 2        super("代码生成-新徏一个空目");
 3        setTitle("代码生成-新徏一个空目");
 4        setDescription("代码生成-新徏一个空目");
 5        setPageComplete(false);
 6        workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
 7    }

 8
 9    /**
10     * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
11     */

12    public void createControl(Composite parent) {
13        initializeDialogUnits(parent);
14
15        final Composite composite = createClientArea(parent);
16
17        createLabel(composite);
18
19        setControl(composite);
20        Dialog.applyDialogFont(composite);
21    }

22
23    /**
24     * 创徏一个用户区?BR>25     * @param composite
26     * @return
27     */

28    private Composite createClientArea(Composite composite) {
29        Composite composite1 = new Composite(composite, SWT.NONE);
30        GridLayout gridlayout = new GridLayout();
31        gridlayout.marginWidth = 0;
32        gridlayout.marginHeight = 0;
33        gridlayout.numColumns = 3;
34        composite1.setLayout(gridlayout);
35        return composite1;
36    }

37
38    /**
39     * 创徏一个Label
40     * @param composite
41     */

42    private void createLabel(Composite composite) {
43        Label label = new Label(composite, 64);
44        label.setText("Label试");
45        GridData griddata = new GridData();
46        griddata.widthHint = convertWidthInCharsToPixels(80);
47        griddata.horizontalSpan = 3;
48        label.setLayoutData(griddata);
49    }

其中的createControl是必d现的Ҏ?BR>xQ我们一个简单的向导制作完成了?BR>友情脓士:
   1.在制作向导的时候,一定要实现addPagesҎQ否则你点下一步的时候,因ؓ没有指定的Page而无法显C出来?BR>


wadise 2005-12-17 11:08 发表评论
]]>
վ֩ģ壺 | | | | ʲ| Т| | | | Ͻ| | | | Ѱ| з| Դ| °Ͷ| | | | ɽ| â| γ| | բ| ־| ǰ| | | | | | ̶| â| | | | | ʯ| ˳| ̫|