자바상에서 조금 무지한 질문입니다.ㅠ0ㅠ;;

다크슈테펜의 이미지

다른 클래스나 같은 클래스에있는 객체에 접근하려면 어떻게 해야 하죠...?
메인함수에서 라벨을 하나 생성해서 쓰레드를 하나 생성해서 거기에 시간을 보여 줄려고 하거든요...
그런데 c#에서 처럼 할려고 해도 안돼네요...
어떤 다른 방법이 있는 건가요...?
초보에게 광명을 내려주세요...ㅠ0ㅠ;;

atie의 이미지

질문도 좋지만, 이 같은 질문에는 책을 먼저 보라고 답을 드려야 하겠습니다. 공부 중이라면 더욱 책을 가까이 해야겠죠.

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

atie의 이미지

darkschutepen wrote:
...
그런데 문제는
그거를 다른 객체로 접근할려고 하면 에러가 나는 겁니다.
...

그 에러가 무엇인가요?

----
I paint objects as I think them, not as I see them.
atie's minipage

다크슈테펜의 이미지

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

atie의 이미지

swt에 대한 것이니 당연히 보시는 책에 없겠군요. 제가 상황을 모르고 도발적으로 말한 셈이 되었군요.

위의 에러는 swt은 Thread를 직접적으로 사용하는 것을 허용하지 않기 때문입니다. syncExec이나 asyncExec으로 검색해 보세요. (이것을 염두에 두고 위에 다른 방법으로 할 수 있다고 이야기 한 것인가요?)

----
I paint objects as I think them, not as I see them.
atie's minipage

뉴피엘의 이미지

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)));
}
}
}

이부분에서..
clock j=new clock();
j.label.setText(String.valueOf(c.get(Calendar.SECOND)));


if (clock.label != null) {
    clock.label.setText(String.valueOf(c.get(Calendar.SECOND)));
}

로 수정해 보면 어떨가여...

我不知道

다크슈테펜의 이미지

음 그래도 에러가 나는 군요..그래도 관심 가져 주셔서 감사합니다.

인생이란게 다 그런게 아니겠어요....? 뭘(?)
http://schutepen.egloos.com

다크슈테펜의 이미지

atie wrote:
swt에 대한 것이니 당연히 보시는 책에 없겠군요. 제가 상황을 모르고 도발적으로 말한 셈이 되었군요.

위의 에러는 swt은 Thread를 직접적으로 사용하는 것을 허용하지 않기 때문입니다. syncExec이나 asyncExec으로 검색해 보세요. (이것을 염두에 두고 위에 다른 방법으로 할 수 있다고 이야기 한 것인가요?)

답변 감사합니다.ㅠ0ㅠ;;
그렇군요...정말 감사드립니다.다른 방법은 위에 말씀하신것 같이 뭐 다른 타이머나 그런거를 사용하면 되지만 SWT로만 한번 프로그램 한번 짜보자고 생각해서요...

인생이란게 다 그런게 아니겠어요....? 뭘(?)
http://schutepen.egloos.com

atie의 이미지

제가 약간 고쳐 보았습니다.

package swt.test;
import java.util.Calendar;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class clock { 
	public static Text text;
	public static Label label;
	static Runnable mRun = new myRunnable();

	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, 250, 25);

		final Button button = new Button(shell, SWT.NONE);
		button.addMouseListener(new MouseAdapter() {
			public void mouseDoubleClick(MouseEvent e) {
				display.asyncExec(mRun);
			}
		});
		button.setBounds(379, 20, 90, 40);
		button.setText("더블클릭");

		label = new Label(shell, SWT.NONE);
		label.setBounds(15, 45, 100, 25);
		label.setText("현재시각");
		shell.layout();
		shell.open();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
	}
}

class myRunnable implements Runnable {
	public void run() {
		//for (;;) {
			Calendar c = Calendar.getInstance();
			//clock j = new clock();
			clock.text.setText(String.valueOf(c.getTime()));
		//}
	}
}

----
I paint objects as I think them, not as I see them.
atie's minipage

다크슈테펜의 이미지

헉 너무 감사드립니다.ㅠ0ㅠ;;

인생이란게 다 그런게 아니겠어요....? 뭘(?)
http://schutepen.egloos.com

bubicom의 이미지

darkschutepen wrote:
헉 너무 감사드립니다.ㅠ0ㅠ;;

잘 마무리 되서 좋네요.

ps. 초기 질문이 너무 단순해서 발생한 스레드 같습니다. :wink:

-------------------------
모든것에 감사합니다.
http://bubicom.winmir.com

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.