SWT 쓰레드 질문
앨런
SWT를 첨 접하는 초보 프로그래머입니다. 트레이부분만 급히 써야할 일이 있어
Snippet143 트레이 예제에 쓰레드를 이용해서 지속적으로 트레이 아이콘을 변경되게 해두었습니다.
문제는 이 상태에서 기존에 있던 이벤트 핸들링이 되지 않네요. 아이콘 변경만 되고 아이콘에서 오른쪽 버튼누르면
팝업메뉴가 나오거나 해당 메뉴를 누르면 콘솔에 해당 메뉴가 선택되었다는 것을 표시되거나 하는 것이
안되네요. syncExec 와 asyncExec 로도 다 해보고
item.getDisplay().syncExec(
new Runnable() {
public void run(){
}
첨엔 위처럼 구현했는데 마찬가지여서 저 부분을 아예 다시 Thread에 넣어보고... 했는데도 잘 안되네요.
아래는 소스입니다.
많은 조언과 따뜻한 관심 부탁드립니다. ㅜ_ㅠ-----------------------------------------------------------------------------------------------
package swtest.tray;
import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;
public class Snippet143 {
static Display display = new Display ();
public static void main(String[] args) {
Shell shell = new Shell (display);
Image image = new Image (display, C:\\Image\\on.png);
final Tray tray = display.getSystemTray ();
if (tray == null) {
System.out.println (The system tray is not available);
} else {
final TrayItem item = new TrayItem (tray, SWT.NONE);
item.setToolTipText(SWT TrayItem);
item.addListener (SWT.Show, new Listener () {
public void handleEvent (Event event) {
System.out.println(show);
}
});
item.addListener (SWT.Hide, new Listener () {
public void handleEvent (Event event) {
System.out.println(hide);
}
});
item.addListener (SWT.Selection, new Listener () {
public void handleEvent (Event event) {
System.out.println(selection);
}
});
item.addListener (SWT.DefaultSelection, new Listener () {
public void handleEvent (Event event) {
System.out.println(default selection);
}
});
final Menu menu = new Menu (shell, SWT.POP_UP);
for (int i = 0; i 8; i++) {
MenuItem mi = new MenuItem (menu, SWT.PUSH);
mi.setText (Item + i);
mi.addListener (SWT.Selection, new Listener () {
public void handleEvent (Event event) {
System.out.println(selection + event.widget);
}
});
if (i == 0) menu.setDefaultItem(mi);
}
item.addListener (SWT.MenuDetect, new Listener () {
public void handleEvent (Event event) {
menu.setVisible (true);
}
});
item.setImage (image);
Thread t = new Thread(new Runnable() {
public void run(){
item.getDisplay().syncExec(
new Runnable() {
public void run(){
Image image = new Image (display, C:\\Image\\on.png);
Shell shell = new Shell (display);
while(true){
long time = System.currentTimeMillis();
String chk = (int)(Math.random()*100)50?chk_false:chk_true;
item.setToolTipText(chk);
if(chk.indexOf(false)0)
image = new Image (display, C:\\Image\\xx.png);
else
image = new Image (display, C:\\Image\\on.png);
item.setImage(image);
System.gc();
try{ Thread.sleep(5000);}catch(Exception e){e.printStackTrace();}
}
}
}
);
}
});
t.start();
}
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ()) display.sleep ();
}
image.dispose ();
display.dispose ();
}
}