锘??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 />
1 Java绱㈠紩寮鍙戣?浜?錛?br />
鑳藉搴旂敤Apache Lucence 鎸夌収妯″瀷瀹氫箟绱㈠紩鏁版嵁搴擄紙MySQL錛孫racle錛孲QL Server)錛孹ML鏂囦歡錛屽茍璋冪敤鐩稿叧鎺ュ彛鑳藉浠eb鏂瑰紡/XML鏂瑰紡鍛堢幇錛岀啛鎮変腑鏂囧垎璇嶏紝鑳藉鏈夊悎閫傜殑鑷畾涔夎瘝搴撴渶濂姐?br />
2 CDN綆$悊鎺у埗绔?浜猴細
鍥犱負CDN鍩轟簬Linux涓婥/C++錛岀鐞嗘帶鍒跺皢閫氳繃Java Socket瀹屾垚綆$悊鎺у埗紼嬪簭涓嶤DN鐨勪氦浜掞紝鎵浠ヨ姹備綘鑳藉鐔熸倝Java Socket錛岃繕鑳介氳繃鏌愮Java Web鎶鏈埗浣滅鐞嗘帶鍒剁Web鐣岄潰銆?br />
榪欎袱涓」鐩皢姘鎬箙寮婧愶紝浣嗘彁渚涢珮綰у埆鐨勫畾鍒朵笌鍜ㄨ鏈嶅姟錛屽鏋滀綘鎴愪負contributor錛屽皢鏈夋満浼氬弬涓庡埌欏圭洰鍒嗘垚涓潵銆?br />
濡傛灉浣犲榪欎袱鏂歸潰鏈夊緢濂界殑緇忛獙錛屾瘮杈冮棽錛屼篃鎰挎剰璇曟按寮婧愰」鐩紝嬈㈣繋鎶ュ悕錛屽茍闄勪笂浣犳湡鏈涚殑鎶ラ叕錛堟寜欏圭洰榪囩▼姣斾緥鍙戞斁錛屽彲絳懼崗璁?
甯屾湜浣犳渶濂藉湪鍖椾含錛岃繖鏍鋒垜濂界粡甯歌澶у鍚冮キ銆?br />
鍔ㄦ墜鍚庯紝灝嗘妸寮鍙戣繃紼嬩腑鐨勭偣婊村啓鎴恇log錛屾斁鍦╞logjava.net錛屼篃綆楀仛涓婊磋礎鐚?)
鑱旂郴
mail: lifesting@gmail.com
msn: step.in@hotmail.com
2 鏁版嵁搴撴敮鎸侊紝鏀寔DB->BO/DAO錛屼篃鏀寔BO(妯″瀷)->DB錛屼腑闂寸殑鏄犲皠榪囩▼閲囩敤浣曠鎶鏈紵Annotation?XML Configuration?
3 蹇熺殑欏圭洰鍚戝錛屽唴緗珮搴︽彁鐐肩殑甯歌涓氬姟榪囩▼銆?br />
4 鍙嬪ソ鐨剋eb鏀寔錛屽湪騫沖彴紜珛寮鍙戞祦紼嬩箣鍚庯紝鍞竴椋樺拷涓嶅畾鐨勫氨鏄痺eb front銆傝繖縐嶆敮鎸佺殑鏍稿績鏄皢涓氬姟鏁版嵁涓庡墠鍙版妧鏈氳繃鏌愮鏂瑰紡緇戝畾鍦ㄤ竴璧鳳紝鍑忓皯鍓嶅彴紼嬪簭鍛樼殑宸ヤ綔閲?澶嶅伐閲忋傜粦瀹氱殑杞戒綋搴旇鏄竴涓?緙栬緫鍣紝WTP緙栬緫鍣ㄥお鐑傘侱reamweaver搴旇鏄竴涓笉閿欑殑閫夋嫨銆?br />
5 闆嗘垚SPring+Hibernate錛屼袱涓鏋朵竴鏄緢浼樼錛屽啀灝辨槸鏈夊緢濂界殑緹や紬鍩虹錛岀粷澶ч儴鍒咼ava紼嬪簭鍛橀兘浼氫竴鐐廣?br />
6 浠g爜鐢熸垚錛屾彁渚涗竴縐嶅彲緙栫▼鐨勪唬鐮佺敓鎴愭満鍒訛紝鐢熸垚緇濆ぇ閮ㄥ垎鍙噸鐢ㄤ唬鐮侊紝鍚屾椂寮哄埗鏌愮浠g爜瀹炵幇妯″紡錛屽噺灝戝嚭閿欐鐜囥?br />
7 涓婁笅鏂囧府鍔╋紝灝介噺鎻愪緵綾諱技浜嶸isual Studio鐨勫府鍔╂満鍒訛紝鍑忓皯騫沖彴鎿嶄綔闄岀敓鎰熴?br />
涓嬭澆
鍏堢湅鍥懼惂錛?br />
鍐嶇湅鐪嬪搴旂殑JSF鏍囪
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:cby="http:/www.lifesting.com/jsf">
<ui:composition template="/tpl.xhtml">
<ui:define name="pageTitle">琛ㄦ牸灞曠ず</ui:define>
<ui:define name="pageHeader">鍥藉</ui:define>
<ui:define name="body">
<h:form>
<h:panelGrid columns="1">
<h:message for="mytable" />
</h:panelGrid>
<cby:rns text="欏甸潰璁劇疆" tableFor="mytable" />
<cby:filter text="榪囨護絳栫暐" tableFor="mytable" />
<cby:delete tableFor="mytable" />
<cby:table id="mytable" var="rec" checkable="true" idField="code"
bean="Country">
<cby:column field="name" sortable="true" filterable="true"
width="200" value="鍚嶇О">
<h:outputText value="#{rec.wrapped.name}"></h:outputText>
</cby:column>
<cby:column field="region" sortable="true" filterable="false"
width="100" value="鍖哄煙">
<h:outputText value="#{rec.wrapped.region}"></h:outputText>
</cby:column>
<cby:column field="surfaceArea" sortable="false" filterable="true"
width="150" value="琛ㄩ潰縐?>
<h:outputText value="#{rec.wrapped.surfaceArea}"></h:outputText>
</cby:column>
<cby:column field="population" sortable="true" filterable="true"
width="100" value="浜哄彛">
<h:outputText value="#{rec.wrapped.population}"></h:outputText>
</cby:column>
<cby:ds />
</cby:table>
</h:form>
</ui:define>
</ui:composition>
</html>
鍥犱負寮鍙戝鉤鍙版渶緇堟槸浠O涓烘牳蹇冿紝鎵浠ユ琛ㄦ牸緇勪歡鏄氳繃璁劇疆 bean錛岀劧鍚庡啀閫氳繃Hibernate鏉ヨ幏鍙栨暟鎹殑銆?br />
榪欎釜緇勪歡闄ら噰鐢↗SF +Facelet涔嬪錛屾病鏈夊叾瀹冮〉闈㈡妧鏈紝浠g爜綆媧侊紝鏃犳娊璞★紝涓旈噷闈㈣繕鏈夋敞閲婏紝鍒濆鑰呭彲浠ュ弬鑰冧竴涓嬨?br />
涓昏鍔熻兘錛?br />
1 璁劇疆column鐨刦ilterable灞炴?true/false)鏉ヨ繃婊ゆ暟鎹?鐩墠瀹炵幇涓哄乏鍖歸厤錛屾瘮濡傝緭鍏a錛屽氨鏄疭a寮澶寸殑)
2 鍒嗛〉瀵艱埅
3 璁劇疆column鐨剆ortable灞炴?true/false)鐢ㄦ潵瀵規煇鍒楄繘琛?姝?鍙?鎺掑簭
4 鏀瑰彉欏佃褰曞ぇ灝忥紝榛樿涓?0鏉?欏?br />
5 璁劇疆table鐨刢heckable灞炴т負true錛岃〃鏍煎皢浼氬涓鍒楃敤鏉ラ夋嫨銆?br />
6 鍙互鎵歸噺鍒犻櫎琚玞hecked鐨勮褰曘?br />
榪欎釜緇勪歡鍙冭檻浜嗗姛鑳斤紝騫舵病鏈夎冭檻鍒扮編瑙傦紝濡傛灉浣犺寰楀彲浠ョ敤錛屾敼鏀瑰畠鐨刪tml灞炴ц緗?br />
瀹夎錛?br />
1 闄勪歡鏄竴涓狹aven欏圭洰錛屽繀欏誨畨瑁呮湁maven銆?br />
2 瀹夎MySQL鏁版嵁搴擄紝鍚姩MySQL錛岃繍琛?
create database world
3 鎵懼埌欏圭洰涓嬮潰鐨剋orld.sql錛屽亣璁懼叾璺緞涓?a/b/c/world.sql錛屼嬌鐢∕ySQL鐨剆ource鍛戒護
use world
source /a/b/c/world.sql
4淇敼欏圭洰涓嬬殑hibernate.cfg.xml涓璏ySQL鏁版嵁搴撶敤鎴峰悕/瀵嗙爜銆?br />
5 鎵цmvn jetty:run 鍚姩
6 嫻忚鍣ㄨ緭鍏?http://localhost:8080/jsftry/ 灝卞彲浠ョ湅鍒版晥鏋滀簡
鍏充簬璋冭瘯錛?br />
1 涓嬭澆涓涓狤clipse JEE鐗堟湰
2 鍦ㄩ」鐩洰褰曚笅鎵ц mvn eclipse:clean eclipse:eclipse -DdownloadSources=true -Dwtpversion=1.5
3 鍦╡clipse workspace涓璱mport姝ら」鐩?br />
铏界劧宸ヤ綔涓笉鐢↗ava寰堜箙浜嗭紝浣嗘嬁璧鋒潵鐜╃帺榪樻槸瑙夊緱Java鐪熺殑寰堟湁鐢熶駭鍔涖侸SF錛孒ibernate錛孧aven錛孍clipse涓涓瘮涓涓墰姣斻?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 />
1 鐢熸垚鍏鍖?public/private key)錛岄氳繃putty鎴栬卌ygwin鐨剆sh-kegen鐢熸垚銆?br />
姝ラ http://alexandria.wiki.sourceforge.net/SSH+Key+Generation
Putty http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
cygwin http://www.cygwin.com/
2 灝唒ublic key 綺樺笘鍒扮洰鏍囩綉绔欎笂銆?br />
3 鍦╟vs 瀹㈡埛绔緗竴涓嬶紝瀹冮渶瑕佷竴涓猻sh瀹㈡埛绔紝putty灝卞彲浠ャ?br />
浠clipse涓轟緥錛?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鏍囧噯鐪嬮綈)
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_12
set EXE_JAVA=%JAVA_HOME%\bin\java
%EXE_JAVA% -version
閭f牱浼氭姤鍛婁竴涓敊璇細
'C:\Program' 涓嶆槸鍐呴儴鎴栧閮ㄥ懡浠わ紝涔熶笉鏄彲榪愯鐨勭▼搴?br />
鎴栨壒澶勭悊鏂囦歡銆?/span>
浠ュ墠涓轟簡閬垮厤榪欑闂錛屼細鎶婃妸JDK鎸埌c:\錛屼絾涓嶆槸涓涓氱敤鐨勮В鍐沖姙娉曪紝鐜板湪鍙互閲囩敤涓ょ鏂瑰紡鏉ヨВ鍐籌細
1 鍔犱笂寮曞彿錛岃〃紺轟竴涓畬鏁磋礬寰勶紝榪欎釜鍦ㄥソ澶氭湇鍔″櫒鎵瑰鐞嗕腑甯哥敤鍒版瘮濡俲boss, tomcat銆?br />
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_12
set EXE_JAVA="%JAVA_HOME%"\bin\java
%EXE_JAVA% -version
2 杞垚鐭礬寰勶紝榪欎釜鎴戣涓烘槸鏈濂界殑瑙e喅鍔炴硶銆?br />
set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_12
for %x in ("%JAVA_HOME%") do set JAVA_HOME=%~sx
set EXE_JAVA=%JAVA_HOME%\bin\java
%EXE_JAVA% -version
闇瑕佹敞鎰忕殑鏄紝鍦ㄦ壒澶勭悊鏂囦歡姣斿 run.bat 涓紝涓婇潰鐨刦or璇彞鐨勫彉閲忔湁涓や釜%%鍙楓?br />
for %%x in ("%JAVA_HOME%") do set JAVA_HOME=%%~sx
鍙︼細濡傛灉鍙槸鎯沖緱鍒?strong>鍥哄畾甯︾┖鏍?/strong>鐨勭煭璺緞錛屾湁涓涓揩鎹鋒柟娉曪紝浣跨敤cmd瀹氫綅鍒版煇涓洰褰曪紝杈撳叆 debug 鍚姩x86铏氭ā寮忚皟璇曪紝鐒跺悗quit鎺ㄥ嚭錛岄偅涔坈md鐨勮礬寰勫氨鍙樻垚鐭礬寰勪簡錛屽涓嬪浘
瀵規瘮涓涓嬶紝鍙互鍙戠幇錛?/p>
铏界劧鐩殑杈懼埌浜嗭紝榪樻槸瑕侀剻瑙嗗井杞殑dos batch錛屽疄鍦ㄥ緢寮憋紝涓嶇煡Powershell鎬庢牱銆?/p>
鍙傝冭祫鏂欙細
setlocal