作者qrtt1 (null)
站內java
標題Re: [問題] SWT Browser
時間Sat Aug 16 00:00:35 2008
※ 引述《slalala (S-ATA提高當好人的門檻值)》之銘言:
: 其實我只寫過Swing 不過我有抓過SWT browser的範例
: 就我swing的經驗 應該是dispose的問題
: 因此才給那幾個關鍵字
: 不過我不懂SWT 留給高手解釋語法
: 以下直接把我手邊的dispose範例
: Shell composite = SWT_AWT.new_Shell(display, embedded);
: //略
: frame.addWindowListener(new WindowAdapter() {
: public void windowClosing(WindowEvent e)
: {
: e.getWindow().dispose();
: composite.dispose();
: }
: });
Swing 的 dispose 和 SWT 的 dispose 意義上極大的不同。
SWT 的元件並不會被自動 GC
http://www.eclipse.org/articles/swt-design-2/swt-design-2.html
如果在 Swing 上內嵌就不會需要有以下這段 code
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
這是每一個 SWT 程式都會需要的一個 MAIN EVENT LOOP
(如果寫過 gtk 的就會覺得是不是很像呢 XD)
所有的元件都會與 display 或 shell 產生關聯
依據 url 內的 rule 2,只要 parent 被 dispose 他的子元件都會被 dispose
所以,只能推測您內嵌使用忘了 dispose 導致 Browser 沒有被釋放。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.80.216
推 slalala:受教了 08/16 00:10
→ slalala:SWT compoment無法被fgc我嚇到了XD 08/16 00:12
推 kene:因為 SWT 通通是用 JNI 寫的, 所以不會自動處理也很正常 08/16 00:13
→ qrtt1:您受驚了 @o@ 不過沒什麼好怕的,只要有閱讀手冊的人都明白 08/16 00:17
推 slalala:我完全沒碰過SWT 呵呵呵 08/16 00:18