다른 클래스나 같은 클래스에있는 객체에 접근하려면 어떻게 해야 하죠...?
메인함수에서 라벨을 하나 생성해서 쓰레드를 하나 생성해서 거기에 시간을 보여 줄려고 하거든요...
그런데 c#에서 처럼 할려고 해도 안돼네요...
어떤 다른 방법이 있는 건가요...?
초보에게 광명을 내려주세요...ㅠ0ㅠ;;
제가 원한 답은 그런게 아니라서요...?
제가 사용한거는 쓰레드를 하나 띄워서 그냥 무한 루프로 돌린다음에...
거기서 시간을 계속 읽어 들인다음에...그거를 다른 클래스에 있는 객체에 뿌려 줄려고 하거든요...
그런데 시스템 아웃 프린트로 입력하면 잘 나옵니다.그런데 문제는
그거를 다른 객체로 접근할려고 하면 에러가 나는 겁니다.
다른 방법도 있는 거는 알지만 그래도 한번 해보고 싶어서요...
쓰레드에서 다른 클래스의 객체로 접근 방법은 없는 건가요...?
제가 보는 책에는 그것에 관한 예제나 언급이 없어서요...
public class clock{
public static Text text;
public static Label label;
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(500, 375);
shell.setText("처음으로 만들어보는 시계");
text = new Text(shell, SWT.BORDER);
text.setBounds(15, 10, 98, 25);
final Button button = new Button(shell, SWT.NONE);
button.addMouseListener(new MouseAdapter() {
public void mouseDoubleClick(MouseEvent e) {
tread t=new tread();
t.start();
label = new Label(shell, SWT.NONE);
label.setBounds(15, 45, 100, 25);
label.setText("label");
shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
}
class tread extends Thread{
public void run(){
for(;;){
Calendar c=Calendar.getInstance();
clock j=new clock();
j.label.setText(String.valueOf(c.get(Calendar.SECOND)));
}
}
}
소스는 위에 있는 내용이고 아래는 에러 메시지 입니다.
Exception in thread "Thread-0" org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(SWT.java:2691)
at org.eclipse.swt.SWT.error(SWT.java:2616)
at org.eclipse.swt.SWT.error(SWT.java:2587)
at org.eclipse.swt.widgets.Widget.error(Widget.java:376)
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:313)
at org.eclipse.swt.widgets.Label.setText(Label.java:516)
at tread.run(clock.java:78)
에러는 이렇게 나옵니다.
왜 그런건가요...?
부탁드립니다.꾸벅~~
지나갈까 하다가...
질문도 좋지만, 이 같은 질문에는 책을 먼저 보라고 답을 드려야 하겠습니다. 공부 중이라면 더욱 책을 가까이 해야겠죠.
http://leepoint.net/notes-java/45examples/40animation/41TextClock/25textclock.html
링크를 보셨으면 (javax.swing.Timer), java.util.Timer와 java.util.TimerTask는 공부하세요.
----
I paint objects as I think them, not as I see them.
atie's minipage
제가 원한 답은 그런게 아니라서요...?제가 사용한거는 쓰레드를 하나
제가 원한 답은 그런게 아니라서요...?
제가 사용한거는 쓰레드를 하나 띄워서 그냥 무한 루프로 돌린다음에...
거기서 시간을 계속 읽어 들인다음에...그거를 다른 클래스에 있는 객체에 뿌려 줄려고 하거든요...
그런데 시스템 아웃 프린트로 입력하면 잘 나옵니다.그런데 문제는
그거를 다른 객체로 접근할려고 하면 에러가 나는 겁니다.
다른 방법도 있는 거는 알지만 그래도 한번 해보고 싶어서요...
쓰레드에서 다른 클래스의 객체로 접근 방법은 없는 건가요...?
제가 보는 책에는 그것에 관한 예제나 언급이 없어서요...
인생이란게 다 그런게 아니겠어요....? 뭘(?)
http://schutepen.egloos.com
[quote="darkschutepen"]...그런데 문제는 그거
그 에러가 무엇인가요?
----
I paint objects as I think them, not as I see them.
atie's minipage
import org.eclipse.swt.SWT;import org.
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import java.util.Calendar;
import org.eclipse.swt.widgets.Label;
public class clock{
public static Text text;
public static Label label;
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(500, 375);
shell.setText("처음으로 만들어보는 시계");
text = new Text(shell, SWT.BORDER);
text.setBounds(15, 10, 98, 25);
final Button button = new Button(shell, SWT.NONE);
button.addMouseListener(new MouseAdapter() {
public void mouseDoubleClick(MouseEvent e) {
tread t=new tread();
t.start();
}
});
button.setBounds(379, 9, 90, 25);
button.setText("button");
label = new Label(shell, SWT.NONE);
label.setBounds(15, 45, 100, 25);
label.setText("label");
shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
}
class tread extends Thread{
public void run(){
for(;;){
Calendar c=Calendar.getInstance();
clock j=new clock();
j.label.setText(String.valueOf(c.get(Calendar.SECOND)));
}
}
}
소스는 위에 있는 내용이고 아래는 에러 메시지 입니다.
Exception in thread "Thread-0" org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(SWT.java:2691)
at org.eclipse.swt.SWT.error(SWT.java:2616)
at org.eclipse.swt.SWT.error(SWT.java:2587)
at org.eclipse.swt.widgets.Widget.error(Widget.java:376)
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:313)
at org.eclipse.swt.widgets.Label.setText(Label.java:516)
at tread.run(clock.java:78)
에러는 이렇게 나옵니다.
왜 그런건가요...?
부탁드립니다.꾸벅~~
인생이란게 다 그런게 아니겠어요....? 뭘(?)
http://schutepen.egloos.com
swt에 대한 것이니 당연히 보시는 책에 없겠군요. 제가 상황을 모르고
swt에 대한 것이니 당연히 보시는 책에 없겠군요. 제가 상황을 모르고 도발적으로 말한 셈이 되었군요.
위의 에러는 swt은 Thread를 직접적으로 사용하는 것을 허용하지 않기 때문입니다. syncExec이나 asyncExec으로 검색해 보세요. (이것을 염두에 두고 위에 다른 방법으로 할 수 있다고 이야기 한 것인가요?)
----
I paint objects as I think them, not as I see them.
atie's minipage
[code:1]class tread extends Thread
이부분에서..
를
로 수정해 보면 어떨가여...
我不知道
음 그래도 에러가 나는 군요..그래도 관심 가져 주셔서 감사합니다.
음 그래도 에러가 나는 군요..그래도 관심 가져 주셔서 감사합니다.
인생이란게 다 그런게 아니겠어요....? 뭘(?)
http://schutepen.egloos.com
답변 감사합니다.
답변 감사합니다.ㅠ0ㅠ;;
그렇군요...정말 감사드립니다.다른 방법은 위에 말씀하신것 같이 뭐 다른 타이머나 그런거를 사용하면 되지만 SWT로만 한번 프로그램 한번 짜보자고 생각해서요...
인생이란게 다 그런게 아니겠어요....? 뭘(?)
http://schutepen.egloos.com
제가 약간 고쳐 보았습니다.[code:1]package swt.t
제가 약간 고쳐 보았습니다.
----
I paint objects as I think them, not as I see them.
atie's minipage
헉 너무 감사드립니다.ㅠ0ㅠ;;
헉 너무 감사드립니다.ㅠ0ㅠ;;
인생이란게 다 그런게 아니겠어요....? 뭘(?)
http://schutepen.egloos.com
[quote="darkschutepen"]헉 너무 감사드립니다.ㅠ0ㅠ;;
잘 마무리 되서 좋네요.
ps. 초기 질문이 너무 단순해서 발생한 스레드 같습니다. :wink:
-------------------------
모든것에 감사합니다.
http://bubicom.winmir.com
댓글 달기