2013-08-03 1 views
-1

나는루프가 지연되는 동안 왜 비어 있습니까?

movieSelection p1 = new movieSelection(); 
this.add(p1); 
this.pack(); 
this.setDefaultCloseOperation(EXIT_ON_CLOSE); 
this.setVisible(true); 

movieChoose는 JPanel의를 확장하는 클래스이며, 페이지 1의 서브 클래스입니다 Main.java에서 호출 JFrame의 생성자 (JFrame에 대한 클래스 Page1.java이다)이있다. JTextField 및 JButton에 ActionListener를 추가하는 생성자로 구성됩니다. 내가 while(true) {};하거나 while(true);를 추가하면

최종 결과는 최종 결과가 이것이다, Page1.java의 생성자의 끝에서이

다음과 같습니다 enter image description here을 지연 한꺼번에 많이와 함께. 는 CPU

어떻게이 비어있는 동안의
261 포트
거의 200 %

20 스레드 :

는 활동 모니터에 따르면,이 공간 프로그램이 차지 얼마나 많은입니다 loop :
a) 프레임에 이미 추가 된 JPanel thats를 엉망으로 만들고,
b) 전체 지연을 만드시겠습니까?

아무 것도하지 않는 루프가 왜 효과가 있습니까?

+2

무한 루프를 응용 프로그램에 추가하면 어떤 결과가 기대됩니까? –

+3

루프 **는 결코 끝나지 않으므로, 선언 한 무한 루프 이후에 프로그램이 다른 문장을 처리 할 수있는 방법은 없습니다 (적어도이 루프는 스레드 안에 있음). –

+0

@LuiggiMendoza는 정답으로 간주합니다 – nachokk

답변

2

마무리까지 예를 들어

while(true){ 

}; 

다음 GUI GET 동결,하지만 코드가 너무 GUI를 렌더링 할 수 없습니다 때문에 결코 완료하지 끝단 않았다.

0

아무 것도하지 않고있는 것이 아닙니다. 루핑 중입니다. '전체적으로 많은 지연'이라고 말하면 앱이 완전히 중단된다는 것을 의미한다고 가정합니다. while() 내리면 안되면 난 놀랄거야.

0

루프가 값이 true 일 때 검사를 중지하지 않기 때문에 ... 이것이 바로 무한 루프라고합니다. 매 사이클은 루핑을 중단해야하는지 확인하는 데 사용됩니다.

0

빈 루프 (실제로는 무한 루프)는 실제로 많은 일을합니다. 이는 페이지를 넘기는 것을 말하는 종이처럼 보이며 뒤에서는 같은 것을 말합니다.

어떤 컴퓨터 언어에서도 결코 빈 루프를 수행하지 마십시오.

당신이 할 수있는 것은 지금 당신이 당신의 주 스레드 실행을 할 수 있지만, JVM을 이야기하기 때문에, 더 나은

while (true) { 
    Thread.sleep(100); 
} 

같은이 "그래, 나는 100 ms 동안 무언가를, 그렇게하지 않을거야입니다 당신이 필요하면 뭔가 다른 ".

하지만 여전히 중요한 것은 놓치기도합니다. 일부 종료 조건입니다.

왜 무한 루프가 필요합니까? 정상적인 스윙 응용 프로그램에서는 메인 스레드를 계속 실행시킬 필요가 없으며 JFrame이 열려 있으면 충분합니다. 어떤 예제 코드를보실 수 있습니다 http://docs.oracle.com/javase/tutorial/uiswing/components/frame.html

+0

* 빈 루프는 실제로 ** 무한 ** 루프를 의미합니다 ** 정의 된 최종 조건을 가진 ** 빈 ** 루프는 아무 것도하지 않고 단지 시간을 낭비합니다. 아마도 메모리. –

+0

(System.currentTimeMillis() == - 1) {}은 유한하고 비어 있으며 수십억 년 동안 동일한 효과를 나타냅니다. 질문에서 가장 파괴적인 것은 빈 몸체이지만, 나는 그것이 공백이라하고 무한하다고 부르는 것이 더 정확하다는 점에 동의한다. –

0

루프는 이론적으로 무한히 실행되기 때문에 지연이 발생할 가능성이 있습니다.어쩌면 당신은 CPU에게 숨을 쉴 수있는 시간이 제공 스레드, 일시 중지 시도 할 수 있습니다 : 당신이 무거운 작업과이 스레드를 차단하면 스윙의 모든 GUI 물건이 EDT

에서 실행되기 때문에

Thread.sleep(5); 
-1

아주 오래되었으므로 아마 읽지 않을 수도 있지만 감사합니다! 가장 번거로운 질문에 답했습니다. (이전에 듀얼 코어 프로세서로 작업하고 있었고, 지금은 단 하나로 바뀌었고 {} 문은 작동이 멈췄습니다.)