2013-03-24 1 views
-3

대신하면서 (사실) 루프의 무언가, 그것은 2 개 클래스자바, 내가 가상 키보드 모듈을 개발했다

에게
  1. KBM (모듈 자체) (포함에이 텍스트 난에 String 데이터의 값을 설정 Enter 키를 누릅니다 KBMListener에서 입력 및 부울 메인 프레임하고 무엇
  2. KBMListener
  3. 메인 프레임

) KBMListener에서 true로 변경 :

,536을

MainFrame 프로그램을 실행하면 GUI가로드되고 "public void run()"에서 "while (true)"루프가 시작됩니다. 이 루프 모양은 다음과 같습니다.

while(true){ 
    if(status_changed){ 
     jTextArea.setText(getKbml().getData()); 
     getKbml.setStatus_changed(false); 
    } 
    sleep(500); 
} 

부울 status_changed는 키보드 리스너에서 변경됩니다.

KBM은 가상 키보드입니다. 사용자가 텍스트를 입력하고 Enter 키를 누르면 KBMListener에서 String 데이터를 입력 된 텍스트로 설정하고 부울 status_changed를 true로 설정합니다.

KBML은 MainFrame을 KBM에 연결하고 사용자가 메인 프레임에서 텍스트 영역을 클릭 할 때마다 KBM에서 키보드를로드합니다.

Enter 키를 누를 때마다 0.5 초마다 또는 메인 프레임에 즉시 값을 가져옵니다.

while 루프는 정상적으로 작동하지만 1.6GHz 듀얼 코어 프로세서에서는 약 12 ​​%의 CPU 사용률을 보입니다. 콜백에 대해 들었지만 어떻게 작동하는지 이해할 수 없습니다. 누군가가 나를 도울 수 있기를 바랍니다 ... 청취자를 피하십시오.

+5

* 실제 코드를 코드로 게시하는 대신 단락 내에 잘못된 의사 코드를 게시 한 이유는 무엇입니까? 귀하의 질문은 현재 이해하기가 훨씬 어렵습니다. –

+0

코드에서 시도한 것을 보여주십시오.이 코드의 큰 설명보다 훨씬 이해할 수 있습니다. –

+0

왜 DocumentListener를 사용하고 싶지 않습니다.이 기능을 효율적으로 구현해야하는 이유는 무엇입니까? .. –

답변

1

옵저버 디자인 패턴을 살펴 보겠습니다. 인터페이스를 사용하여 '청취자'에게 변경 사항을 알리고 종종 무한 루프에 대한 대답입니다. 간단한 구현 예제와 자세한 내용은 여기를 참조하십시오. http://java.dzone.com/articles/design-patterns-uncovered

또는 단순히 웹에서 "observer pattern java"를 검색하십시오.

+0

공용 클래스 MainFrame은 javax.swing.JFrame을 확장하여 Runnable을 구현하고 observer로 확장 할 수 있습니다. JFrame으로 확장한다면? –

+0

@ user1934053 아무 것도 확장 할 필요가 없습니다. 리스너 인터페이스를 구현하기 만하면됩니다. 내가 링크 된 튜토리얼은 내장 관찰자 클래스를 사용합니다. 실제로 좋지는 않습니다. 죄송합니다. "관찰자 패턴"에 대한 구글 검색, 당신은 정보를 많이 찾을 수 있지만 자바에 대한 좋은 결과가 나오지 놀랐어요 ... – MarioDS