2013-05-25 3 views
0

다른 스레드에서 텍스트 필드를 설정하려고합니다. 내 프로그램에 버튼이 있는데 그것을 클릭하면 새 스레드가 실행되고 소켓에서 무언가를 얻는다. 데이터에 따라 세 개의 텍스트 필드를 설정하려고하는데 할 수 없다. 내 메인 윈도우 클래스에서 .settext() 호출을 수행하는 메소드를 작성했지만, 메인 윈도우 인스턴스에 대한 참조가 없기 때문에 메소드를 호출 할 수 없습니다. 내 텍스트 상자를 제대로 업데이트하려면 어떻게해야합니까?다른 스레드에서 GUI에 액세스하는 방법

컴파일러가 그런 불평 때문에 내 콤보 세트를 최종 작성해야합니까?

다른 방법 MainWindow.java

이 어떤 원인에 정의 된 내부 클래스 내부가 아닌 최종 변수으로 comboBox를 참조 할 수 있습니까?

public void run() 
{ 
    os.print("INIT {ClassName USARBot."+type.name +"} {Location "+firstPos.x+" , "+firstPos.y+" ,"+firstPos.z+" } {Name "+robotName+"}\r\n"); 
    while (true) 
     try 
     { 
      String str=is.readLine(); 
      String[] substr1=null; 
      Position p = new Position(); 
      Scanner s=null; 
      if(str.contains("{Type GroundTruth}")) 
       substr1=str.split(" "); 
       s=new Scanner(substr1[8]); 
       p.x=s.nextDouble(); 
       p.y=s.nextDouble(); 
       p.z=s.nextDouble(); 
       s.close(); 
       //Here I want to set Textfields in MainWindow 
     } catch (IOException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
} 
+0

당신은 내가 당신이 몇 가지 코드를 게시 할 수 있습니다 스윙 – user1180619

+0

을 사용하고 GUI 툴킷을 요구하는 경우? – Arpit

+0

java – user1180619

답변

1

정답은 "론 성운"에서 (귀하의 의견을 투표를하거나 여기에 코멘트를 넣을 수 없습니다)있다.

여기서 SwingWorker의 좋은 설명은 예 : SwingWork example and explanation입니다.
지난 주 내가 똑같은 문제를 해결해야 할 때가 좀 복잡해졌습니다.

0

그러나 당신이 의견을 아래의 코드는 다음과 같습니다

SwingUtilities.invokeLater(new Runnable(){ 

    public void run(){ 
     someTextField1.setText("sometext1"); 
     someTextField2.setText("sometext2"); 
     someTextField3.setText("sometext3"); 
    } 
}); 
관련 문제