锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
寮濮嬭繕鎬鐤戜粬鐨凧DK鐗堟湰澶綆瀵艱嚧鐨勶紝浣嗘槸涓鐪嬫槸JDK1.6鐨勶紝榪鋒儜浜嗗嚑縐掋傘傘?br />
鐒跺悗鎴戞墦寮浜咵clipse鐨凧ava緙栬瘧閫夐」錛?strong>鍙戠幇鍘熸潵閬囧埌榪欎釜闂鐨勪漢鐨凧ava緙栬瘧綰у埆璁劇疆鐨勬槸1.4錛屽涓嬪浘錛屽綋鐒跺氨浼?xì)鍑洪棶棰樹簡銆?br />
鍛靛懙錛岃櫧鐒訛紝榪欐槸涓皬闂錛屼絾鏄鏋滈亣鍒頒簡榪樼湡澶熸柊鎵嬮儊闂蜂竴闃電殑銆?br />
]]>
寰愮殦錛屽寳浜埅絀鴻埅澶╁ぇ瀛﹁綆楁満緋繪湰縐戠敓錛屼綘鍙互閫氳繃ertri@163.com涓庝粬鑱旂郴銆?/p>
姝f枃
涓嶇伒鏁忕殑鍥懼艦鐢ㄦ埛鐣岄潰浼?xì)闄嶄綆搴旂敤绋嬪簭鐨勫彲鐢ㄦс傚綋浠ヤ笅鐜拌薄鍑虹幇鐨勬椂鍊欙紝鎴戜滑閫氬父璇磋繖涓敤鎴風(fēng)晫闈㈠弽搴斾笉鐏墊晱銆?/p>
榪欎簺鐜拌薄鍦ㄥ緢澶х▼搴︿笂涓庝簨浠剁殑澶勭悊鏂規(guī)硶鐩稿叧錛岃屽湪緙栧啓Swing搴旂敤紼嬪簭鐨勬椂鍊欙紝鎴戜滑鍑犱箮蹇呯劧瑕佺紪鍐欐柟娉曞幓鍝嶅簲榧犳爣鐐瑰嚮鎸夐挳錛岄敭鐩樺洖杞︾瓑浜嬩歡銆傚湪榪欎簺鏂規(guī)硶涓垜浠緙栧啓涓浜涗唬鐮侊紝鍦ㄨ繍琛屾椂鍘昏Е鍙戜竴浜涘姩浣溿傚父瑙佸姩浣滃寘鎷煡鎵撅紝鏇存柊鏁版嵁搴撶瓑銆傚湪榪欑瘒鏂囩珷涓氳繃瀵逛竴涓疄渚嬬殑鍒嗘瀽錛屼粙緇嶄簡涓浜涘熀鏈蹇碉紝甯歌鐨勯敊璇互鍙婃彁鍑轟簡涓涓В鍐蟲柟妗堛?/p>
event-dispatching thread
鎴戜滑涓瀹氳璁頒綇錛屼簨浠跺搷搴旀柟娉曠殑浠g爜閮芥槸鍦╡vent-dispatching thread涓墽琛岀殑錛岄櫎闈炰綘鍚敤鍙︿竴涓嚎紼嬨?/p>
閭d箞錛屼粈涔堟槸event-dispatching thread鍛紵鍦ㄣ奐ava Tutorial銆媅1]涓紝浣滆呯粰鍑轟簡涓鏉″崟涓綰跨▼瑙勫垯錛氫竴鏃︿竴涓猄wing緇勪歡琚疄鐜幫紙realized錛夛紝鎵鏈夌殑鏈夊彲鑳藉獎鍝嶆垨渚濊禆浜庤繖涓粍浠剁殑鐘舵佺殑浠g爜閮藉簲璇ュ湪event-dispatching thread涓鎵ц銆傝屽疄鐜頒竴涓粍浠舵湁涓ょ鏂瑰紡錛?/p>
鍗曚竴綰跨▼瑙勫垯鐨勬牴婧愭槸鐢變簬Swing緇勪歡搴撶殑澶ч儴鍒嗘柟娉曟槸瀵瑰綰跨▼涓嶅畨鍏ㄧ殑錛屽敖綆″瓨鍦ㄤ竴浜涗緥澶栥傝繖浜涗緥澶栫殑鎯呭喌鍙互鍦ㄣ奐ava Tutorial銆媅1]鐨勭浉鍏崇珷鑺傛壘鍒幫紝榪欓噷涓嶅啀灞曞紑銆?/p>
涓轟簡鏀寔鍗曚竴綰跨▼妯″瀷錛孲wing緇勪歡搴撴彁渚涗簡涓涓笓闂ㄦ潵瀹屾垚榪欎簺涓嶴wing緇勪歡鐩稿叧鐨勬搷浣滅殑綰跨▼錛岃岃繖涓綰跨▼灝辨槸event-dispatching thread銆傛垜浠殑浜嬩歡鍝嶅簲鏂規(guī)硶閫氬父閮芥槸鐢辮繖涓綰跨▼璋冪敤鐨勶紝闄ら潪浣犺嚜宸辯紪鍐欎唬鐮佹潵璋冪敤榪欎簺浜嬩歡鍝嶅簲鏂規(guī)硶銆傚湪榪欓噷鍒濆鑰呯粡甯哥姱鐨勪竴涓敊璇氨鏄湪浜嬩歡鍝嶅簲鏂規(guī)硶涓畬鎴愯繃澶氱殑涓庝慨鏀圭粍浠舵病鏈夌洿鎺ヨ仈緋葷殑浠g爜銆傚叾鏈鏈夊彲鑳界殑鏁堟灉灝辨槸瀵艱嚧緇勪歡鍙嶅簲緙撴參銆傛瘮濡備互涓嬪搷搴旀寜閽簨浠剁殑浠g爜錛?/p>
String str = null;
this.textArea.setText("Please wait...");
try {
//do something that is really time consuming
str = "Hello, world!";
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.textArea.setText(str); 聽 聽
鎵ц涔嬪悗鐨勬晥鏋滃氨鏄寜閽技涔庡畾浣忎簡涓孌墊椂闂達(dá)紝鐩村埌Done.鍑虹幇涔嬪悗鎵嶅脊璧鋒潵銆傚師鍥犲氨鏄疭wing緇勪歡鐨勬洿鏂板拰浜嬩歡鐨勫搷搴旈兘鏄湪event-dispatching thread涓畬鎴愮殑錛岃屼簨浠跺搷搴旂殑鏃跺欙紝event-dispatching thread琚簨浠跺搷搴旀柟娉曞崰鎹紝鎵浠ョ粍浠朵笉浼?xì)琚洿鏂般傝岀洿鍒頒簨浠跺搷搴旀柟娉曢鍑烘椂鎵嶆湁鍙兘鍘繪洿鏂癝wing緇勪歡銆?/p>
涓轟簡瑙e喅榪欎釜闂錛屾湁浜轟篃璁鎬細(xì)璇曞浘閫氳繃璋冪敤repaint()鏂規(guī)硶鏉ユ洿鏂扮粍浠訛細(xì)
final String[] str = new String[1];
this.jTextArea1.setText("Please wait...");
this.repaint();
try {
Thread.sleep(1000L);
}catch(InterruptedException e) {
e.printStackTrace();
}
str[0] = "Done.";
jTextArea1.setText(str[0]);
浣嗘槸榪欎竴涓柟娉曟病鏈夎搗鍒伴鏈熺殑浣滅敤錛屾寜閽粛鐒跺畾浣忎竴孌墊椂闂達(dá)紝鍦ㄥ療鐪嬩簡repaint()鏂規(guī)硶鐨勬簮浠g爜涔嬪悗灝辯煡閬撳師鍥犱簡銆?/p>
PaintEvent e = new PaintEvent(this, PaintEvent.UPDATE,
new Rectangle(x, y, width, height));
Toolkit.getEventQueue().postEvent(e); 聽 聽 聽 聽
repaint()鏂規(guī)硶瀹為檯涓婃槸鍦ㄤ簨浠墮槦鍒楅噷鍔犱簡涓涓猆PDATE鐨勪簨浠訛紝鑰屾病鏈夌洿鎺ュ幓閲嶇敾緇勪歡錛岃屼笖榪欎竴涓簨浠跺彧鑳界瓑寰呭綋鍓嶇殑浜嬩歡鍝嶅簲鏂規(guī)硶緇撴潫涔嬪悗鎵嶈兘琚垎閰嶃傚洜姝ゅ彧鏈夌粫榪囧垎閰嶆満鍒剁洿鎺ヨ皟鐢╬aint鏂規(guī)硶鎵嶈兘杈懼埌鐩殑銆?/p>
final String[] str = new String[1];
this.jTextArea1.setText("Please wait...");
this.paint(this.getGraphics());
try {
Thread.sleep(1000L);
}catch(InterruptedException e) {
e.printStackTrace();
}
str[0] = "Done.";
jTextArea1.setText(str[0]);
榪欐牱鍗存槸瀹炵幇浜嗘洿鏂幫紝浣嗘槸榪樺瓨鍦ㄧ潃浠ヤ笅鐨勯棶棰樸傝櫧鐒朵粠鎰熻涓婏紝鎸夐挳宸茬粡寮硅搗鏉ヤ簡錛屼絾鏄湪Done.鍑虹幇涔嬪墠錛屾垜浠嵈鏃犳硶鎸変笅榪欎釜鎸夐挳銆傚彲浠ヨ鎸夐挳榪樻槸瀹氫綇浜嗭紝鍙笉榪囧畾鍦ㄤ簡寮硅搗鐨勭姸鎬併傝皟鐢ㄩ噸緇樻柟娉曟棤娉曚粠鏍規(guī)湰涓婅В鍐抽棶棰橈紝鍥犳鎴戜滑闇瑕佸姹傚叾浠栫殑鏂規(guī)硶銆?/p>
浣跨敤澶氱嚎紼?/b>
鏈夋晥鐨勮В鍐蟲柟娉曟槸浣跨敤澶氱嚎紼嬨傞鍏堢湅涓鐪嬩竴涓洿濂界殑瑙e喅鏂規(guī)錛岃繖涓鏂規(guī)鏄湪鍙傝冦奟ethinking Swing Threading銆媅3]鐨勪竴涓▼搴忕墖孌靛畬鎴愮殑錛?/p>
final String[] str = new String[1];
this.jTextArea1.setText("Please wait...");
this.repaint();
new Thread() {
public void run() {
try {
Thread.sleep(1000L);
}catch(InterruptedException e) {
e.printStackTrace();
}
str[0] = "Done.";
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
jTextArea1.setText(str[0]);
}
});
}
}.start();
鍦ㄨ繖涓▼搴忎腑錛岃鑺辮垂澶ч噺鏃墮棿鐨勬搷浣滆鏀懼埌鍙︿竴涓嚎紼嬪綋涓紝浠庤屼嬌浜嬩歡鍝嶅簲鏂規(guī)硶鑳藉揩閫熻繑鍥烇紝event-dispatching thread灝卞彲浠ユ洿鏂癠I鍜屽搷搴斿叾瀹冧簨浠朵簡銆傛敞鎰忓埌榪欎釜紼嬪簭浣跨敤浜唅nvokeLater()鏂規(guī)硶銆俰nvokeLater()鏂規(guī)硶鐨勪綔鐢ㄦ槸璁〆vent-dispatching thread鍘昏繍琛屽埗瀹氱殑浠g爜銆傚綋鐒朵篃鍙互涓嶄嬌鐢╥nvokeLater()鏂規(guī)硶錛屼絾鏄繖鏍峰氨榪濊儗浜嗗崟涓綰跨▼鍘熷垯錛屽悓鏃跺甫鏉ヤ簡涓瀹氱▼搴︾殑鐩稿澶氱嚎紼嬬殑涓嶅畨鍏ㄦс傚埌鐜板湪錛岃В鍐蟲柟妗堜技涔庢槸瀹岀編鐨勪簡錛屼絾鏄垜浠湅涓鐪嬪湪鍘熸潵鐨勭▼搴忔坊鍔犱笅闈㈢殑浠g爜錛屽敖綆℃垜浠氬父涓嶈繖鏍峰仛銆?/p>
public void paint(java.awt.Graphics g) {
super.paint(g);
g.drawRect(1, 1, 100, 100);
}
鎴戜滑浼?xì)鍙戠庮C互鍓嶇敾鐨勭煩褰㈣瑕嗙洊浜嗕竴閮ㄥ垎錛屽師鍥犳槸鐢變簬鎴戜滑娌$敤閲嶇敾榪欎竴涓煩褰紝鍥犳鍦ㄧ粨灝懼姞涓婂repaint()鏂規(guī)硶鐨勮皟鐢ㄣ?/p>
final String[] str = new String[1];
this.jTextArea1.setText("Please wait...");
this.repaint();
new Thread() {
public void run() {
try {
Thread.sleep(1000L);
}catch(InterruptedException e) {
e.printStackTrace();
}
str[0] = "Done.";
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
jTextArea1.setText(str[0]);
repaint();
}
});
}
}.start();
濡傛灉浣犺涓鴻繖孌典唬鐮佽繃浜庣己涔忓彲璇繪э紝閫氳繃鍦ㄣ奐ava Tutorial銆媅1]閲岄潰浠嬬粛鐨凷wingWorker鏉ョ畝鍖栫紪紼嬬殑鏂規(guī)硶銆傚彲浠ラ氳繃瀹炵幇涓涓猚onstruct()鏂規(guī)硶鏉ュ疄鐜拌姳璐瑰ぇ閲忔椂闂寸殑鎿嶄綔鍜岄噸鍐檉inished()鏂規(guī)硶鏉ュ畬鎴愮粍浠舵洿鏂扮殑宸ヤ綔銆?/p>
this.jTextArea1.setText("Please wait...");
final SwingWorker worker = new SwingWorker() {
public Object construct() {
try {
Thread.sleep(1000L);
}catch(InterruptedException e) {
e.printStackTrace();
}
return "Done.";
}
public void finished() {
jTextArea1.setText(getValue().toString());
repaint();
}
};
worker.start();
鍦ㄣ奟ethinking Swing Threading銆媅3]錛屼綔鑰呭皢浠ヤ笂鐨勭紪紼嬫柟寮忕О涓哄悓姝ユ柟寮忋傚彟澶栦綔鑰呮彁鍑轟簡涓涓氳繃娑堟伅鏈哄埗鏉ュ疄鐜扮浉鍚屽姛鑳界殑鏇存竻鏅幫紝浣嗘槸闇瑕佺紪鍐欐洿澶氫唬鐮佺殑"寮傛"鐨勬柟娉曘?/p>
緇撹
鎬諱箣錛屾垜浠湪緙栧啓浣跨敤Swing緇勪歡鐨勭▼搴忔槸瑕佽浣忎互涓嬪嚑鐐癸細(xì)
1銆佷笉瑕佽繃澶氬湴鍗犵敤event-dispatching thread錛?/p>
2銆佷笌鏇存柊緇勪歡鐩稿叧鐨勪唬鐮佽浣跨敤event-dispatching thread鍘繪墽琛岋紱
3銆佽鏇存柊緇勪歡銆?/p>
緙栧啓鍙嶅簲鐏墊晱鐨勫浘褰㈢敤鎴風(fēng)晫闈㈣繕闇瑕佽冭檻寰堝闂錛屼互涓婂彧鏄渶鍩烘湰鐨勪竴閮ㄥ垎銆傛榪庢湁鍏磋叮鐨勮鑰呮潵淇¤繘琛岃璁恒?/p>
紼嶅井瑕佽В閲婁竴涓嬬殑鏄button鐨勮竟妗嗛兘璁劇疆鎴愪負(fù)0錛岃繕鏈夎竟妗嗙殑閲嶇粯璁劇疆false錛屾垜浠彲浠ョ敤涓嶅悓鐨勮創(chuàng)鍥捐〃紺烘寜閽閫変腑絳夌殑鐘舵?br />
浣跨敤榪欎釜緇勪歡鐨刣emoCode
Step2錛?/span>javac 緙栬瘧璇ユ枃浠訛紝鐢熸垚ProcessHandler.class鏂囦歡
Step3錛?/span>javah ProcessHandler.class 鐢熸垚pkg_ProcessHandler.h Native鏂規(guī)硶澶存枃浠訛紝娉ㄦ剰鍖呭悕瀛椾負(fù)pkg錛屾墍浠ョ敓鎴愮殑鏂規(guī)硶浠?/span>pkg_寮澶?/span>
Step4錛氫嬌鐢?/span>Eclipse寤虹珛Managed Make C++ Project錛屽湪絎簩姝ラ夋嫨Shared Library錛岀劧鍚庢妸鍒氬垰鐢熸垚鍜岀殑pkg_ProcessHandler.h 鍔犲叆宸ョ▼
Step5錛氬疄鐜?/span>Native鏂規(guī)硶錛屼粠澶存枃浠墮噷闈?/span>Copy鍑鴻繖涓柟娉曪紝瀹屾垚鍏蜂綋瀹炵幇錛岀紪璇戝伐紼嬶紝鐢熸垚dll
Step6錛氬畬鎴愬悗Jni璋冪敤錛屾敞鎰?/span>dll搴撻渶瑕佸湪緋葷粺Path閲岋紝鍚﹀垯浼?xì)鍑虹?/span>java.lang.UnsatisfiedLinkError: no *** in java.library.path
闄や簡涓婇潰鐨勮礬寰勯棶棰橈紝榪樻湁鍙兘涓嶈兘鎴愬姛璋冪敤璇?/span>
dll
錛屽師鍥犱笂
g++/gcc
緙栬瘧鍑烘潵鐨勪笢瑗垮拰
java
棰勬湡鐨勪笉鍖歸厤錛岃緇嗘弿榪板弬鑰?/span>
http://www.tkk7.com/lixf/archive/2005/12/23/25177.html
銆?/span>
win32
涓嬩嬌鐢?/span>
gcc
緙栬瘧渚?/span>
java
璋冪敤鐨?/span>
dll
欏葷煡
(jni)
錛?/span>
鎴戜篃鏄亣鍒伴棶棰?/span>
Google
鍒拌繖綃囨枃绔犵殑錛?/span>
Solution
褰撶劧涔熷湪璇ユ枃绔犻噷闈?/span>
鍙傝冭祫鏂欙細(xì)
渚嬭В VC++ 6.0 瀹炵幇 JNI
錛堥潪鐑傛枃錛?/span>