锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鎵浠ョ殑宸ュ叿閮藉畨瑁呮垨瑙e帇涔嬪悗錛屽湪swt婧愪唬鐮佺洰褰曚笅鎵懼埌build.bat錛屽湪:X86 label閮ㄥ垎鍋氬涓嬮厤緗紝鍏朵腑閰嶇疆鐨勭洰褰曡浣犵殑瀹夎鑰屽畾錛?br />
濡傛灉浣犲拰鎴戜竴鏍風殑鐢ㄧ殑鏄疭un鐨凧DK錛屼笖鐗堟湰鏄?.5鎴?.6錛岃繕欏諱慨鏀逛竴涓嬪拰build.bat鍚岀洰褰曠殑make_win32.mak鏂囦歡銆?/p>
鏇挎崲 涓?/p>
涓鏃﹂厤緗畬鎴愬悗錛屽氨鍙互鍦ㄥ懡浠よ涓繍琛?build.bat x86 鏉uild swt浜嗭紝濡傛灉浣犵殑build榪囩▼涓嚭閿欙紝浣跨敤build x86 clean鍒犻櫎鍨冨溇鏂囦歡錛岀劧鍚庡啀鏌ユ槑鍘熷洜銆傚鏋滄病鏈夐敊璇殑璇濓紝鐩綍涓嬩細鐢熸垚5涓猟ll鏂囦歡錛屽垎鍒槸swt-awt-win32-XXXX.dll, swt-gdip-win32-XXXX.dll, swt-wgl-win32-XXXX.dll, swt-win32-XXXX.dll, swt-xulrunner-win32-XXXX.dll錛屽叾涓璛XXX鏄浣犵殑Eclipse鐗堟湰鑰屽畾銆?br />
鏀瑰姩涔嬪悗錛?br />
鏀瑰姩鐨勭洰鐨勫氨鏄湪緋葷粺鑿滃崟閲岄潰鍔犱簡涓涓彍鍗曢」 "Bang"錛岀偣鍑誨悗浼氬嚭鐜?#8220;Hello world” 瀵硅瘽妗嗐?br />
瀵瑰簲璇█娉ㄩ噴 /* a lot of words */ 鎴栨枃妗f敞閲?/** more words */
鍏朵腑 *鍥犱負鏄痳egular expression鐨刴eta word錛岄渶瑕佽漿涔夈?br />Eclipse涓殑鏌ユ壘鏄笉鑳借緗崟琛屾垨鑰呭琛岀殑錛屽嵆DOT . 涓嶅寘鍚?\r \n錛屾墍浠s浠f浛錛岋紵琛ㄧず闈炶椽濠紝鍗崇鍒版敞閲婄粨鏉?*/ 瑕佸仠姝?br />
鎴戠殑閭鏄細 lifesting%gmail.com (replace % with @), msn id is step.in%hotmail.com
鎴戞兂瑕佸仛鐨勪竴涓笢瑗垮氨鏄互妯″瀷涓轟腑蹇冪殑寮鍙戞柟寮忥紝瀹冭“闅愯棌”鍦‥clipse閲岄潰銆傛瘮濡傛棩甯告垜浠仛鐨勪紒涓氬紑鍙戝ぇ閮ㄥ垎鏄互涓氬姟灞侭O涓烘牳蹇冿紝鐒跺悗鍚戜笅寤朵幾鑷沖瓨鍌紝鍚戜笂鏈塻ervice/service control/page control/page涔嬬被錛岄偅涔堥氳繃涓濂楀彲緙栫▼妯℃澘錛堝嵆Template DSL)+浠g爜鐢熸垚鍣ㄥ氨鍙互鐢熸垚鎯寵鐨勫悇涓眰鐨勪唬鐮佷簡錛屽叾鏈川涓婃槸涓涓猆ML鍥懼艦寤烘ā宸ュ叿錛屼笂闈㈢粦瀹氭ā鏉匡紝妯℃澘鐨勭紪鍐欐彁渚涚被浼糐DT(鎻愪緵鍦‥clipse緙栧啓/璋冭瘯Java浠g爜鐨勬彃浠墮泦)鐨勯珮浜?綰犻敊錛岄噸鏋勭瓑錛屼唬鐮佺敓鎴愯繃紼嬪彲浠ヨ榪愯鎴栬呭崟姝ヨ皟璇曘?br />
MDA鍦‥clipse紺懼尯鐨勬帹鍔ㄤ笅錛屾棩娓愭垚鐔燂紝浠MF metamodel鎻忚堪鐨刄ML2瓚沖寮哄ぇ錛屽湪鎶鏈畬鍏ㄥ彲琛岋紝寰峰浗鐨刼aw錛屾硶鍥界殑acceleo閮芥湁鎴愮啛鐨勫簲鐢ㄣ?br />
鎴戝仛榪欎釜鐨勬兂娉曞氨鏄府紼嬪簭鍛樻憜鑴辯箒閲嶇悙紕庣殑姣斿javabean, html, configuration絳夈?br />
鍟嗕笟妯″紡灝辨槸浣跨敤鍏嶈垂+鏀惰垂涓撲笟鍩硅鏀寔銆?br />
鏈夊悓浠佸湪鎼濵DA綾諱技鐨勫紑鍙戜箞錛熸榪庢彁鍑哄疂璐墊剰瑙併?br />
濡傛灉浣犳槸涓涓灞侸avaEE鐨勫紑鍙戣咃紝姣忓ぉ琚玸pring, hibernate, jdbc, structs/jsf/xxx, html鎶樼(錛屾渶甯屾湜鍏卞府浣犺В鍐抽偅浜涢棶棰樺憿錛熻阿璋€?/strong>
Update: Just do it錛屽厛鍘誨皾璇曚竴鎶婏紝鍋氫竴涓増鏈嚭鏉ワ紝璋㈣阿鍏蟲敞銆?br />
Ubuntu鐪熸槸涓ソ涓滆タ錛岃楃殑璧勬簮灝戯紝鍥懼艦緋葷粺紼沖畾錛屽寮鍙戜漢鍛樺強鍏跺弸濂斤紝鐪熺殑寰堝己澶с?br />
-I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/pixman-1
-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0
static void destroy(GtkWidget*, gpointer);
static gboolean delete_event(GtkWidget*, GdkEvent*, gpointer);
int main(int argc, char *argv[]) {
GtkWidget *window, *label;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW (window), "Hello World!");
gtk_container_set_border_width(GTK_CONTAINER (window), 10);
gtk_widget_set_size_request(window, 200, 100);
/* Connect the main window to the destroy and delete-event signals. */
g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(destroy), NULL);
g_signal_connect(G_OBJECT(window), "delete_event",
G_CALLBACK(delete_event), NULL);
/* Create a new GtkLabel widget that is selectable. */
label = gtk_label_new("Hello World");
gtk_label_set_selectable(GTK_LABEL (label), TRUE);
/* Add the label as a child widget of the window. */
gtk_container_add(GTK_CONTAINER (window), label);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
/* Stop the GTK+ main loop function when the window is destroyed. */
static void destroy(GtkWidget *window, gpointer data) {
gtk_main_quit();
}
/* Return FALSE to destroy the widget. By returning TRUE, you can cancel
* a delete-event. This can be used to confirm quitting the application. */
static gboolean delete_event(GtkWidget *window, GdkEvent *event, gpointer data) {
return FALSE;
}
(浠ヤ笂浠g爜鏉ヨ嚜鍥句功 Foundation of GTK+ development)
鐒跺悗榪愯錛屾甯鎬細鏄懼紡濡備笅錛?br />
鍏充簬Job涓嶈浜嗭紝鏃犳墍涓嶅湪錛屾垜瑕佽鐨勬槸job鐨勪竴浜涘睘鎬с?br />
1 緇橨ob鍔犱笂Action錛屽綋鐢ㄦ埛鍦↗ob榪愯鐨勬椂鍊欑偣鍑繪椂錛屽彲鏄劇ず鏇村叿浣撶殑job鎻忚堪鎴栬呭job鏈韓榪涜鎿嶄綔銆?br />
@Override
protected IStatus run(IProgressMonitor monitor) {
monitor.beginTask("My job is working", 100);
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {} // ignore
monitor.worked(1);
}
monitor.done();
return new Status(IStatus.OK, Activator.PLUGIN_ID, "ok, job finished!");
}
};
job.setProperty(IProgressConstants.ACTION_PROPERTY, new Action() {
@Override
public void run() {
MessageDialog.openInformation(new Shell(), "Job Status", "Some partial results processed can be displayed here");
}
});
job.schedule();
鏁堟灉鍥撅細
2 鍦≒rogress View閲岄潰淇濈暀璁板綍
鏁堟灉鍥撅細
3 闃叉error dialog鎵撴柇浣犵殑鎿嶄綔銆俻rocess view閲岄潰榪愯鐨刯ob濡傛灉榪斿洖鐨剆tatus鏄痚rror錛岄偅涔堥粯璁ゅ畠浼氬脊鍑轟竴涓猠rror dialog璀﹀憡job鏈夐敊璇紝濡傛灉job榪愯鐨勫悓鏃朵綘鍦ㄥ共鍒殑錛岃繖鍙兘浼氭墦鏂綘鐨勬煇涓搷浣?Eclispe鐨刣ialog閮芥槸modal鐨?銆?br />
鎶妀ob鐨勮繑鍥炵姸鎬佹敼涓篹rror銆?br />
error dialog:
鍔犱笂灞炴у睆钄絜rror dialog:
4 緇橨ob鍔犱竴涓浘鏍囷細
鏁堟灉濡備笅錛?br />
鐪嬪緱鍑烘潵瀹冩槸鍦↗DT UI閲岄潰瀹氫箟鐨勶紝緇煎悎浜唈dt text editor template 濡?Java寮澶寸殑category 鍜宑ustom editor template濡係WT寮澶寸殑category銆傚浜庢垜鏉ヨ錛孲WT/Draw2d/Plugin鐨勫ぇ閲忛噸澶嶆т唬鐮佸氨鍙互閫氳繃榪欎釜鏉ュ畬鎴愪簡銆傚皢妯℃澘鐨勪唬鐮佹彃鍏ュ埌緙栬緫鍣ㄦ湁涓ょ鏂規硶錛屼竴縐嶆槸鐩存帴鎷栨嫿鍒扮紪杈戝櫒涓紝鍙︿竴縐嶆槸杈撳叆綆鍐欏叆濡?execute"錛屾寜Contxt Assist蹇嵎閿?涓鑸負Ctrl+Space)銆?br />
闄ゆ涔嬪錛孴emplates View榪樺彲浠ョ淮鎶emplate姣斿add/remove銆俆emplate鐨勫間互XML瀛椾覆瀛樻斁鍦?metadata\.plugins\org.eclipse.core.runtime\.settings\org.eclipse.jdt.ui.prefs鏂囦歡鐨刼rg.eclipse.jdt.ui.text.custom_templates欏?br />
璧峰垵鎴戜互涓篢emplate View濂藉儚榪樻病鏈夋彁渚涗粈涔圢B鍔熻兘錛屽湪Window->Preferences->Java->-Editor->Templates鍙互鍋氬悓鏍風殑浜嬫儏錛屼絾紼嶅井鐪嬩簡涓涓嬩唬鐮侊紝鍙戠幇鎴戦敊浜嗭細
Templates View鏄疨ageBookView錛屾剰鍛崇潃瀹冭窡Properties View/Outline View涓鏍鳳紝鍙互鏍規嵁涓嶅悓鐨凟ditor鏉ユ樉紺轟笉鍚岀殑Page錛屾瘮濡備笂鍥綣DT灝辨槸JavaTemplatesPage錛屽鏋滅紪鍐欎竴涓狣SL Editor闇瑕佺敤鍒癟emplates View錛岀戶鎵緼bstractTemplatesPage錛岀劧鍚庡湪Editor鐨刧etAapter()榪斿洖page錛岀湅Java Editor紺轟緥錛?br />
public class CompilationUnitEditor extends JavaEditor implements IJavaReconcilingListener {
public Object getAdapter(Class required) {
if (SmartBackspaceManager.class.equals(required)) {
if (getSourceViewer() instanceof JavaSourceViewer) {
return ((JavaSourceViewer) getSourceViewer()).getBackspaceManager();
}
}
if (ITemplatesPage.class.equals(required)) {
if (fTemplatesPage == null)
fTemplatesPage= createTemplatesPage();
return fTemplatesPage;
}
return super.getAdapter(required);
protected JavaTemplatesPage createTemplatesPage() {
return new JavaTemplatesPage(this);
}
}
褰撶劧錛屽ぇ閮ㄥ垎浜轟笉闇瑕佸啓editor錛屾垜浠彲浠ュ湪鑷繁鐨勬彃浠墮噷閫氳繃浣跨敤鎵╁睍鐐規潵org.eclipse.ui.editors.templates鎵╁睍JDT Template錛屾瘮濡傛垜灝卞湪GEF欏圭洰閲岄潰鍔犲叆浜咷EF Template錛岃繖鏍風紪鍐欒鍘岀殑EditPart/EditPolicy/Command灝卞彲浠ュ皯浜涘ソ澶氫唬鐮併?br />
絎竴寮犲浘鐗囩湅鍒扮殑swt template灝辨槸鍦ㄤ笂鍥炬墍紺虹殑default-swttemplates.xml閲岄潰瀹氫箟濂戒簡鐨勩?br />
鏈鍚庢兂鍛婅瘔騫垮ぇEclipse鐖卞ソ鑰呯殑灝辨槸錛孍clipse SDK鍐欑殑浠g爜鐪熷伐鏁達紝鏋滅劧鏄崗浣滅殑緇撴櫠錛屾暣涓涓唬鐮佸疂搴擄紝鏍規湰涓嶇敤鐪?strong>浠g爜澶у叏浜?)銆?
鍗充嬌鍦℅MF涓? DiagramAction涔熸槸鍙栧緱鏄紶鏍囩偣鍑籶aste鏃剁殑浣嶇疆錛岃屼笉鏄箣鍓嶅彸閿崟鍑誨嚭鐜癱ontxt menu鐨勪綅緗傝繖閲?strong>“瀹氱偣”鍏抽敭鏄湪閫夋嫨paste涔嬪墠鍙抽敭鍗曞嚮鐨勪綅緗凡緇忚璁頒綇浜嗭紝騫朵笖瀵筩ontext menu涓墍鏈夊浣嶇疆鏁忔劅鐨刟ction閮芥湁鏁堬紝姣斿merge, duplicate絳夈?br />
涓嬮潰鍒嗕笁姝ュ畬鎴愶細
1 瀹氫箟涓涓帴鍙o紝涓烘墍鏈変綅緗晱鎰焌ction鎻愪緵浣嶇疆淇℃伅
void setLocation(int x,int y);
}
2 娉ㄥ唽涓涓猯istener鍒癎EF editor鐨刢ontext menu錛屾彁渚涗綅緗蹇嗭紝榪欎釜鏄叧閿?/strong>
private LivingEditor editor;
private IMenuListener listener = new IMenuListener(){
@Override
public void menuAboutToShow(IMenuManager manager) {
Control canvas = getViewer().getControl();
Point cursor_location = canvas.getDisplay().getCursorLocation();
Point relative_canvas = canvas.toControl(cursor_location);
setItemLocation(manager,relative_canvas);
}
private void setItemLocation(IMenuManager manager, Point relative_canvas) {
IContributionItem[] items = manager.getItems();
for (int i =0; i < items.length; i++)
{
IContributionItem item = items[i];
if (item instanceof ActionContributionItem)
{
IAction host_action = ((ActionContributionItem)item).getAction();
if (host_action instanceof ILocationWare)
((ILocationWare)host_action).setLocation(relative_canvas.x, relative_canvas.y);
}
else if (item instanceof IMenuManager)
{
setItemLocation((IMenuManager)item, relative_canvas);
}
}
}
};
public LivingContextMenu(LivingEditor lv) {
super((GraphicalViewer)lv.getAdapter(GraphicalViewer.class));
editor = lv;
addMenuListener(listener);
}
.
.
.
@Override
public void dispose() {
removeMenuListener(listener);
super.dispose();
}
}
3 瀵逛綅緗晱鎰熺殑action瀹炵幇ILocationWare鎺ュ彛錛屾瘮濡俻aste銆?/strong>
private Point location = new Point(10,10);
private boolean contextTrigged=false;
public PasteAction(LivingEditor part) {
super(part);
}
@Override
public void run() {
//some operations depend on location
}
@Override
public void setLocation(int x, int y) {
location.setLocation(x, y);
contextTrigged = true;
}
@Override
protected void init() {
super.init();
setId(ActionFactory.PASTE.getId());
ISharedImages workbench_images = PlatformUI.getWorkbench().getSharedImages();
setImageDescriptor(workbench_images.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE));
setDisabledImageDescriptor(workbench_images.getImageDescriptor(ISharedImages.IMG_TOOL_PASTE_DISABLED));
}
}
榪欑瑙e喅鍚屾牱閫傜敤浜嶨MF鐨凞iagramAction銆?DiagramAction涔熸槸Action鐨勫瓙綾?
1 瀹氫箟涓涓狧ackedGroupEditPart:
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.MarginBorder;
import org.eclipse.draw2d.geometry.Insets;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.internal.ui.palette.editparts.GroupEditPart;
import org.eclipse.gef.palette.PaletteContainer;
import org.eclipse.jface.action.Separator;
public class HackedGroupEditPart extends GroupEditPart {
public HackedGroupEditPart(PaletteContainer group) {
super(group);
}
@Override
protected void refreshVisuals() {
super.refreshVisuals();
Insets insets = getContentPane().getBorder().getInsets(getContentPane());
getContentPane().setBorder(new MarginBorder(insets){
@Override
public void paint(IFigure figure, Graphics graphics, Insets insets) {
Rectangle r = getPaintRectangle(figure, insets);
r.height--;
graphics.setForegroundColor(ColorConstants.buttonDarker);
graphics.drawLine(r.x, r.bottom(), r.right(), r.bottom());
}
});
}
}
2 浣跨敤榪欎釜鍔犱簡杈規鐨凣roupEditPart錛屽湪緙栬緫鍣ㄥ畾涔夐噷闈㈤噸鍐?createPaletteViewerProvider 鏂規硶錛屽涓嬶細
.
.
@Override
protected PaletteViewerProvider createPaletteViewerProvider() {
return new PaletteViewerProvider(getEditDomain())
{
@Override
public PaletteViewer createPaletteViewer(Composite parent) {
//add border for GroupEditPart
final PaletteEditPartFactory pepf = new PaletteEditPartFactory()
{
@Override
protected EditPart createGroupEditPart(
EditPart parentEditPart, Object model) {
return new HackedGroupEditPart((PaletteContainer)model);
}
};
PaletteViewer pViewer = new PaletteViewer(){
{
setEditPartFactory(pepf);
}
};
pViewer.createControl(parent);
configurePaletteViewer(pViewer);
hookPaletteViewer(pViewer);
return pViewer;
}
};
}
}
鎴戠殑Palette瀹氫箟錛屼嬌鐢ㄤ簡涓変釜PaletteGroup錛屼絾涓嶆敼涓涓嬫牴鏈湅涓嶅嚭鏉?strong>group涔嬮棿鐨勫垎闅?/strong>錛?br />
public static PaletteRoot provide(LivingEditor livingEditor) {
PaletteRoot root = new PaletteRoot();
createStandardTool(root);
createConnectionTool(root);
createModelTool(root);
return root;
}
private static void createModelTool(PaletteRoot root) {
PaletteGroup model_group = new PaletteGroup("model");
CombinedTemplateCreationEntry person_entry = new CombinedTemplateCreationEntry("Person",
"Create a person",
new SimpleFactory(Person.class),
Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icon/person16.png"),
Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icon/person24.png")
);
model_group.add(person_entry);
CombinedTemplateCreationEntry dog_entry = new CombinedTemplateCreationEntry("Dog",
"Create a dog",
new SimpleFactory(Dog.class),
Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icon/dog16.gif"),
Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icon/dog24.gif"));
model_group.add(dog_entry);
root.add(model_group);
}
private static void createConnectionTool(PaletteRoot root) {
ConnectionCreationToolEntry relation = new ConnectionCreationToolEntry("relation",
"relation between person and dog",
new SimpleFactory(Relation.class),
Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icon/connection16.gif"),
Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icon/connection24.gif")
);
PaletteGroup conn_group = new PaletteGroup("relations");
conn_group.add(relation);
root.add(conn_group);
}
private static void createStandardTool(PaletteRoot root) {
PaletteGroup std = new PaletteGroup("Standard");
SelectionToolEntry selection = new SelectionToolEntry();
std.add(selection);
root.add(std);
}
鍙互鐪嬩竴涓嬩慨鏀瑰悗鐨勫姣旓細
涓嶈繃榪欑鏂規硶浣跨敤浜唅nternal API錛屼笉閫傚簲鐗堟湰鏇存柊錛屽彧閫傚悎鏁戞ャ傛垜宸茬粡鎶ュ憡浜嗚繖涓?strong>璇細錛?.5搴旇涓嶄細鏈変簡銆?br />
濡傛灉浣犱篃鏈夎繖涓洶鎵幫紝灝辮瘯璇曞惂銆?br />
榪欎簺鏁堟灉璁㏑CP涓嬬殑SWT瓚婃潵瓚婅窡騫沖彴鐩稿叧錛屼絾鐭涚浘鐨勬槸SWT瑕佽法騫沖彴錛屾彁渚涚殑API鍙兘鏄竴涓鉤琛′駭鍝?灝戣琛ュ厖錛屾洿澶氱壒鎬т緷璧栨垜浠SWT榪涜鎵╁睍銆傛瘮杈冨父瑙佺殑鏄SWT Win32 API榪涜鎵╁睍錛屽洜涓篧indows鐨勫浘褰㈢壒鎬уお涓板瘜浜嗭紝涓嶇敤鐧戒笉鐢ㄥ晩銆?br />
涓嬮潰灝變互SWT win32 x86鏉ユ紨紺轟竴涓嬭繖涓墿灞曡繃紼嬨傛墿灞曞緢綆鍗曪紝灝辨槸鍦╯wt鐨勭獥鍙d笂鍔犱竴涓嚜瀹氫箟緋葷粺鑿滃崟錛屾渶緇堟晥鏋滃涓嬪浘錛?br />
棣栧厛瑕佹湁SWT JNI婧愪唬鐮侊紝鍦‥clipse plug-in鐩綍涓嬫壘鍒皁rg.eclipse.swt.win32.win32.x86.source_3.X.X.vXXX.jar(xx涓虹増鏈彿)錛岃В鍘嬬緝鍒癱:\build\swt-jni錛岃В瀹屽悗鍦ㄤ細鍙戠幇鏈変竴鍫唄鍜宑鏂囦歡錛屽叾涓瘮杈冮噸瑕佺殑灝辨槸os, gdip, xpcom,wgl,awt錛岀敤閫斿垎鍒涓嬶細
浜嗚Вswt婧愪唬鐮佷箣鍚庯紝鎺ヤ笅鏉ヤ負build swt鍋氬噯澶囥?br />
:X86
2
3IF x.%DEV_TOOLS%==x. set DEV_TOOLS=c:\PROGRA~1
4call %DEV_TOOLS%\MICROS~2\vc98\bin\vcvars32.bat
5IF x.%MSSDK%==x. set MSSDK=%DEV_TOOLS%\MICROS~3
6call %MSSDK%\setenv /XP32 /RETAIL
7IF x.%OUTPUT_DIR%==x. set OUTPUT_DIR=..\out
8IF x.%JAVA_HOME%==x. set JAVA_HOME=%DEV_TOOLS%\Java\jdk1.6.0_06
9IF x.%XULRUNNER_SDK%==x. set XULRUNNER_SDK=C:\gecko-sdk
10set XULRUNNER_MAKE=make_xulrunner
11IF x.%1==x.x86 shift
12GOTO MAKE
瑕佸疄鐜版垜浠兂瑕佺殑鏁堟灉錛岃繕闇閽堝SWT鐨勬秷鎭鐞嗙▼搴?WndProc) 鎵╁睍涓涓婳S錛岄偅灝辨槸鍦ㄥ氨鍦ㄤ富紿楀彛寤虹珛榪囩▼涓欏線緋葷粺鑿滃崟閲岄潰鍔犱竴鑷畾涔夐」銆傚湪Win32涓紝紿楀彛寤虹珛鐨勬秷鎭負WM_CREATE(鍊間負1)銆備負綆鍗曡搗瑙侊紝榪欓噷鍙槸瑕嗙洊浜哠WT鐨勯粯璁ゆ秷鎭鐞嗙▼搴忥紝瀹冮氳繃os.c涓殑 OS_NATIVE(DefWindowProcW)鏂規硶鏉ュ疄鐜扮殑(鍦?8浠ュ悗鐨勭増鏈琣pi閮芥槸unicode錛屾墍浠ュ彧瑕嗙洊W鐗堟湰)
鏀瑰姩涔嬪墠錛?/p>
#ifndef NO_DefWindowProcW
2JNIEXPORT jint JNICALL OS_NATIVE(DefWindowProcW)
3 (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
4{
5 jint rc = 0;
6 OS_NATIVE_ENTER(env, that, DefWindowProcW_FUNC);
7 rc = (jint)DefWindowProcW((HWND)arg0, arg1, (WPARAM)arg2, (LPARAM)arg3);
8 OS_NATIVE_EXIT(env, that, DefWindowProcW_FUNC);
9 return rc;
10}
11#endif
#ifndef NO_DefWindowProcW
2
3#define ID_CUSTOM_MENU 32888
4
5const wchar_t* wcTitle=L"Hello";
6const wchar_t* wcContent=L"World";
7const wchar_t* wcName = L"Bang";
8
9LRESULT CALLBACK MyWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
10{
11 int wmId, wmEvent;
12 HMENU hSysMenu;
13 switch (message)
14 {
15 case WM_CREATE:
16 hSysMenu = GetSystemMenu(hWnd,FALSE);
17 InsertMenuW(hSysMenu,1,MF_BYPOSITION | MF_STRING,ID_CUSTOM_MENU,wcName);
18 break;
19 case WM_DESTROY:
20 PostQuitMessage(0);
21 break;
22 case WM_SYSCOMMAND:
23 wmId = LOWORD(wParam);
24 if (wmId==ID_CUSTOM_MENU)
25 MessageBoxW(hWnd,wcTitle,wcContent,MB_OK);
26 else
27 return DefWindowProcW(hWnd, message, wParam, lParam);
28 break;
29 default:
30 return DefWindowProcW(hWnd, message, wParam, lParam);
31 }
32 return 0;
33}
34
35JNIEXPORT jint JNICALL OS_NATIVE(DefWindowProcW)
36 (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
37{
38 jint rc = 0;
39 OS_NATIVE_ENTER(env, that, DefWindowProcW_FUNC);
40 rc = (jint)MyWndProc((HWND)arg0, arg1, (WPARAM)arg2, (LPARAM)arg3);
41 OS_NATIVE_EXIT(env, that, DefWindowProcW_FUNC);
42 return rc;
43}
44
45#endif
閲嶆柊鍦╯wt婧愮洰褰曚笅榪愯build x86錛岀敓鎴愮殑swt灝辨槸鎵╁睍浠ュ悗鐨勭増鏈?br />
鐜板湪鎴戜滑鏉ユ祴璇曚竴涓嬫晥鏋滐紝鍐欎竴涓涓嬫墍紺虹殑HelloWorld1.java錛屾斁鍒皊wt婧愮洰褰曚笅錛屽厛榪愯javac HelloWorld1.java錛屽啀榪愯java HelloWorld1銆備笉鐢ㄦ媴蹇僣lasspath涓巐ibrary path錛宐uild涔嬪悗瀹冧滑榛樿閮藉湪褰撳墠鐩綍涓嬨?/p>
import org.eclipse.swt.widgets.*;
public class HelloWorld1 {
public static void main (String [] args) {
Display display = new Display ();
Shell shell = new HelloWorld1 ().open (display);
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ()) display.sleep ();
}
display.dispose ();
}
public Shell open (Display display) {
Shell shell = new Shell (display);
shell.open ();
return shell;
}
}
鍦ㄧ獥鍙f爣棰樻爮鍗曞嚮鍙抽敭錛岀偣鍑誨嚭鐜扮殑Bang鑿滃崟浼氭湁濡備笅鏁堟灉鍥撅細
榪欎釜渚嬪瓙铏界劧綆鍗曪紝浣嗗ぇ鑷存弿榪頒簡鎵╁睍swt鐨勮繃紼嬶紝鏇村鏉傜殑鎵╁睍絳夊緟YOU鏉ュ疄鐜幫紒
棣栧厛鐪嬩竴孌典唬鐮侊細
2 public class Simple {
3 public static void main(String[] args) {
4 int max = 10;
5 for(int i = 0; i < max ; i++)
6 {
7 simpleAction(i);
8 }
9 }
10
11 private static void simpleAction(int i) {
12 int tmp = i;
13 if (i == 5)
14 throw new NullPointerException("5 is invalid number!");
15 System.out.println("Number "+tmp+" reached!");
16 }
17 }
18
榪欐浠g爜闈炲父綆鍗曪紝灝辨槸鎵撳嵃10涓暟瀛楋紝浣嗕腑闂翠竴涓嚭浜嗗紓甯革紝鍋囪鎴戜滑蹇樿Eclipse鐨凟xception BreakPoint(鍦ㄥ鏉傜殑鍦哄悎錛屼笉涓瀹氭姏Exception)錛屼簬鏄湅鍒版帶鍒跺彴闄や簡寮傚父淇℃伅涔嬪悗錛屾垜浠彲鍦ㄧ7琛屽拰絎?2琛岃緗柇鐐癸紝鐪嬭皟鐢╥鍒板簳鍙戠敓浜嗕粈涔堛?br />
鍚姩璋冭瘯鍚庝竴鍒囨甯革紝闄や簡浣犲繀欏籉8 4嬈★紝鍥犱負0-4姝e父錛屼絾涔熷湪鏂偣澶勶紝寰堢儲浜恒傛湁娌℃湁鍙兘嬋媧繪柇鐐逛竴嬈″憿錛熷綋鐒跺彲浠ャ?br />
浠庢帶鍒跺彴鐪嬪埌5 is invalid number錛岄偅涔堣繖嬈¤皟璇曞彧閽堝5錛屾垜浠彲浠ョ畝鍗曠殑璁劇疆涓涓嬶細
絎竴姝ワ細
絎簩姝ュ湪鍑虹幇鐨勫璇濇鍐咃紝閫変腑Enable Condition錛屾帴鐫杈撳叆鎴戜滑鐨刢ondition: i==5
OK錛屽啀璋冭瘯鍚姩Simple錛屽彂鐜版柇鐐規縺媧繪槸鍦╥=5鐨勬椂鍊欙紝鎴戜滑灝卞彲浠6涓姝ヤ竴姝ョ湅鍒板簳鍙戠敓浜嗕粈涔堛?br />
榪欑鏉′歡璋冭瘯鍦ㄤ嬌鐢ㄥ鏉傜殑妗嗘灦鐨勬椂鍊欐瀬鍏舵湁鐢紝涓句釜渚嬪瓙錛?br />
GMF鐨凙bstractActionHandler鏈塏澶氬瓙綾伙紝浣犲繀欏葷洿鎺ユ垨闂存帴鐨勭戶鎵垮畠錛屽悓鏃朵嬌鐢ㄥ畠鐨凙PI錛屽湪瀹冪殑API寰堝鏉傝屾垜榪樺湪鎺㈢儲鐨勬儏鍐典笅錛屽嚭閿欏湪鎵闅懼厤錛屽嚭閿欏悗鍦ˋbstractActionHandler鐨勬煇涓狝PI閲岃緗簡涓鏂偣錛屼絾浣犲彧鎯沖叧蹇冭嚜宸卞啓鐨勫瓙綾?/span>錛屽惁鍒?/span>浼?/span>鎸塅8瓚呰繃1鍒嗛挓錛岄偅涔堟垜浠彲浠ュ湪涓婇潰鐨刢ondition text閲岄潰杈撳叆錛?br />
this.getClass().getName().equals("foo.bar.MyDiagramAction")
灝卞彲浠ョ渷鎺夊緢澶氶夯鐑︺?br />
褰撶劧condition鍙互鍐欑殑寰堝鏉傦紝鍙互閽堝鏂偣鐨刢ontext鍐欎換鎰廕ava浠g爜銆?br />
!ENTRY org.eclipse.osgi 4 0 2008-05-30 12:54:33.671
!MESSAGE Application error
!STACK 1
java.lang.RuntimeException: Application "org.eclipse.ui.ide.workbench" could not be found in the registry. The applications available are: org.eclipse.jdt.core.JavaCodeFormatter, org.eclipse.update.core.standaloneUpdate, org.eclipse.update.core.siteOptimizer, org.eclipse.equinox.app.error.
at org.eclipse.equinox.internal.app.EclipseAppContainer.startDefaultApp(EclipseAppContainer.java:242)
at org.eclipse.equinox.internal.app.EclipseAppContainer.start(EclipseAppContainer.java:98)
at org.eclipse.equinox.internal.app.Activator.addingService(Activator.java:112)
at org.osgi.util.tracker.ServiceTracker$Tracked.trackAdding(ServiceTracker.java:1064)
at org.osgi.util.tracker.ServiceTracker$Tracked.trackInitialServices(ServiceTracker.java:926)
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:330)
at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:274)
at org.eclipse.equinox.internal.app.Activator.start(Activator.java:54)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl$2.run(BundleContextImpl.java:999)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:993)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:974)
at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:346)
at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:260)
at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:400)
at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:111)
at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:417)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:189)
at org.eclipse.osgi.framework.internal.core.BundleLoader.findLocalClass(BundleLoader.java:340)
at org.eclipse.osgi.framework.internal.core.SingleSourcePackage.loadClass(SingleSourcePackage.java:37)
at org.eclipse.osgi.framework.internal.core.BundleLoader.findClassInternal(BundleLoader.java:405)
at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:369)
at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass(BundleLoader.java:357)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:83)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at org.eclipse.core.internal.runtime.PlatformActivator.startAppContainer(PlatformActivator.java:47)
at org.eclipse.core.internal.runtime.PlatformActivator.start(PlatformActivator.java:32)
....
綰㈣壊瀛椾綋琛ㄧずworkbench榪欎釜application騫舵病鏈夊姞杞藉埌RCP runtime涓潵錛孭lugin registry閲岄潰娌℃湁娉ㄥ唽淇℃伅錛屽湪3.2涓?extension org.eclipse.ui.ide.workbench鏄敵鏄庡湪鎻掍歡org.eclipse.ui.ide涓殑錛岄氳繃Plugin Registry Search錛屽彂鐜板湪3.3涓紝榪欎釜extension declaration琚尓鍒版彃浠秓rg.eclipse.ui.ide.application涓簡錛屼簬鏄?strong>鍦ㄩ」鐩殑product閰嶇疆涓姞鍏rg.eclipse.ui.ide.application榪欎釜鎻掍歡渚濊禆錛岀劧鍚庨変腑榪欎釜鎻掍歡錛岀偣鍑?Add Required Plug-ins"錛屽啀clear, 鍚姩錛岃繍琛屾甯搞?br />
浠庤繖涓護浜烘伡鐏殑鏀瑰姩鏉ョ湅錛孍clipse鍦ㄩ愭笎鍚戝畠鐨勪袱涓秼鍔夸箣涓闈犳嫝錛屽嵆鎴愪負浜у搧寮鍙戝鉤鍙?RCP)銆?鍙﹀涓涓槸鍚慜SGi鏍囧噯鐪嬮綈)
浜岃繘鍒跺寘涓嬭澆 錛?span style="color: #ff0000">鍥犱負blogjava涓嶈涓婁紶jar鏂囦歡錛岃涓嬭澆鍚庡皢zip鍚庣紑鏀逛負jar鍚庣紑鐒跺悗鎷瘋礉鍒癳clipse/plugins鐩綍)
涓鑸湪浣跨敤Eclipse榪囩▼涓細鏈変袱縐嶈窡鏂囦歡緙栫爜(charset)鏈夊叧鐨勬儏鍐佃鎴戜滑涓嶆剦蹇?br />
1 瀵煎叆涓涓」鐩?/strong>
鍋囪浣犵殑鍚屼簨鍋氬ソ浜嗕竴涓」鐩紝涓轟簡鏇村ソ鐨勬敮鎸佸浗闄呭寲錛岄噷闈㈢殑jsp欏甸潰閮介噰鐢║TF-8錛岀劧鍚庡彂緇欎綘錛屼綘瀵煎叆鍒癊clipse鐨剋orkspace涓紝涓鑸儏鍐典笅錛屽湪Eclipse涓紝榪欎簺jsp閮藉彉鎴愪簡GBK緙栫爜錛屼綘鍙屽嚮鎵撳紑錛屼竴鍫嗕貢鐮併傚亣璁句綘鐭ラ亾鍘熷洜錛岀◢寰涓嬭緗竴涓嬪彲浠ヨВ鍐抽棶棰橈細
(鍥? 璁劇疆鏂囦歡緙栫爜)
浣嗘槸錛岃繖涓」鐩彲鑳藉寘鍚?000涓猨sp鏂囦歡錛屼笖浣犺繕鍙兘鍙嶅弽澶嶅紕板埌榪欎釜闂錛岀湡鏄竴涓綋鍔涙椿銆?br />
2 鏀瑰彉涓涓」鐩枃浠剁殑緙栫爜
榪欑鎯呭喌鍙戠敓姣旇緝灝戯紝浣嗗彂鐢熶簡灝辨槸涓涓ぇ闅鵑銆傛瘮濡傚叕鍙告湁涓や釜鍥㈤槦錛屼竴涓紑鍙戠殑欏圭洰jsp閲囩敤UTF-8緙栫爜錛屽彟澶栦竴涓噰鐢℅BK緙栫爜銆備竴孌墊椂闂翠箣鍚庯紝闇瑕佹暣鍚堜袱涓」鐩紝jsp欏甸潰鍙兘閲囩敤涓縐嶇紪鐮侊紝UTF-8/GBK鎴栧叾瀹冦傛湁緇忛獙鐨勪漢鐭ラ亾榪欐槸涓涓?strong>鎷瘋礉/璁劇疆緙栫爜/綺樿創鐨勮繃紼嬶細
2.1 灝嗘煇涓猨sp鐨勫唴瀹瑰叏閮ㄦ嫹璐濅笅鏉ャ?br />
2.2 濡傚浘1鎵紺哄皢緙栫爜璁劇疆涓虹粺涓緙栫爜濡俇TF-8銆?br />
2.3 鎶婅緗繃緙栫爜鐨刯sp鏂囦歡娓呯┖錛岀劧鍚庣矘璐淬?br />
濂藉儚瑙e喅闂寰堝畬緹庯紝浣嗘槸Eclipse娌℃湁瀹忥紝濡傛灉鏂囦歡寰堝錛屾瘮濡?000涓紝灝嗘槸涓涓亹鎬栫殑浠誨姟銆?br />
鍥犱負榪欎袱涓棶棰樿佹槸鍙嶅鐨勫洶鎵扮潃鎴戠殑鍚屼簨錛岀浉淇′篃鍥版壈浜嗕笉灝慗ava寮鍙戣咃紝Eclipse杞爜鎻掍歡寰堝ソ寰堟柟渚跨殑瑙e喅浜嗚繖涓棶棰橈紝瀹冨熀浜嶦clipse 3.3寮鍙戯紝鎵浠ョ紪璇戠幆澧冩渶濂介噰鐢‥clipse 3.3銆?br />
涓嬮潰鏄嬌鐢ㄦ楠?br />
step1. 灝嗘彃浠禼om.lifesting.tool.encoding_1.0.0.jar鎷瘋礉鍒癳clipse/plugins鐩綍涓嬶紝閲嶅惎Eclipse銆?br />
step2. 閫夋嫨鏌愪釜欏圭洰錛屽彸閿夋嫨properties錛岀劧鍚庣偣鍑籆onvert Setting榪涜杞爜瑙勫垯璁劇疆錛屽涓嬪浘錛?br />
涓嬭澆eclipse 3.2 binary涓嬭澆鍚庢敼鍚庣紑zip涓簀ar錛岀劧鍚庢斁鍒癳clipse/plugins鐩綍
eclipse鍐呯疆涓涓猵roperties editor浣嗘槸鍙敮鎸乴atin-1緙栫爜錛岃皟鐢╪ative2ascii澶夯鐑︼紝sourceforge涓婃湁涓涓緢寮哄ぇ鐨刾roperties editor錛屾棩鏈漢鎼炲緱錛岃偗瀹氭敮鎸佷腑鏂囦簡錛屼絾鏄増鏈お鑰侊紝3.1錛岃繕鏈夊緢澶氭病鏈変粈涔堝澶х敤澶勭殑swing, jbuild鏀寔絳夛紝鎴戠◢寰敼浜嗕竴涓嬶紝鍋氫簡涓涓渶灝忓寲鐨勭紪杈戝櫒銆?br />
涓ユ鐢蟲槑錛?strong>姝よ蔣浠跺睘浜庣爺絀舵ц川錛岀増鏉冨睘浜庡師浣滆咃細http://propedit.sourceforge.jp/index_en.html
鏁堟灉錛?br />
涓嬭澆鍚庡皢宸ョ▼瀵煎叆鍒皐orkspace涓紝export鎴恜lugin鍗沖彲銆?br />