??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 GMT60- Eclipse概括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>:

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>

Eclipse启动时会所有的插g清单文gd一个插件注册表中,为每个插件创Z个投影。此时插件本w不会被加蝲Q只加蝲它们的描qC息,调用PlatformcȝgetPluginRegistry()Ҏ可以得到这个投׃界的内容?/SPAN>
动作必须实现的接口是IworkbenchWindowDelegateQ而当你要为工作台里的一?/SPAN>Java对象增加一个动作时Q你必须实现IobjectActiveDelegate接口?/SPAN>

]]>- 代码生成器插件开?--生成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代码如下:
1
public 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>
接下来我们就要对q些Actionq行相应的代码编写完成指定的工作?BR>友情脓士:
1.在构造函C一定要指定
setEditDomain(new DefaultEditDomain(this));才能调用getPaletteRootq把视图昄出来?/FONT>
]]> - 代码生成器插件开?--文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, true, true, 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
}); 
]]> - 代码生成器插件开?--代码生成目框架的创?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阅读全文

]]> - 代码生成器插件开?--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。如图:

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

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>
]]>
վ֩ģ壺
촨|
|
|
|
ʲ|
Т|
|
|
|
Ͻ|
|
|
鶴|
Ѱ|
з|
Դ|
°Ͷ|
|
|
|
ɽ|
â|
γ|
|
բ|
־|
ǰ|
|
|
|
|
|
̶|
â|
|
|
|
|
ʯ|
˳|
̫|