문제가 있습니다. 루프를 사용하여 무언가를 그립니다. 실행을 일시 중지하려면 Sleep을 사용합니다. 그 사이에, 나는 라인이 많은 textArea를 볼 수 있기를 원합니다. 나는 그들을 볼 수있게 아래로 스크롤해야합니다.하지만 나는 할 수 없습니다. Sleep을 사용하면 불가능합니다. 제안 사항이 있으십니까? 감사합니다. .루프를 일시 중지했지만 여전히 텍스트를 볼 수 있습니다.
답변
이벤트 스레드에서 절전 모드를 사용하지 마십시오. 나는 당신이 Swing 응용 프로그램이라고 가정합니다 (이것이 맞는지 아닌지를 알려주세요). 그렇다면 이벤트 스레드에서 Thread.sleep(...)
을 호출하면 전체 GUI가 잠자기 상태가되어 반응이 없습니다. 대신, Swing 응용 프로그램 인 경우 스윙 타이머를 사용하십시오.
자습서 : How to Use Swing Timers
편집 한
참고 :이 SwingWorker를를 사용하는 여기에 많은 권장하며,이 유용 할 수 있지만, 필요한 코드가 수행 할 않는 내가 그들을 사용하여 보류 것 시간 격차 사이의 시간은 매우 CPU 집약적이며 중간에서 큰 파일 읽기와 같이 완료하는 데 약간의 시간이 걸립니다. 모두 원을 그린 다음 일시 중지하고 다른 원을 그리는 경우 SwingWorker는 지나치게 잔인하며 구현하기가 훨씬 쉬운 Swing Timer도 갈 수 있습니다.
모든 권장 사항과 마찬가지로 답변은 문제의 특성에 따라 다르며 더 자세히 알려주십시오.
@ ada90 : 편집 1을 참조하십시오. 편집에 대한 –
+1, 그가 언급 한 의견에서 그는 (EDT에서 발생해야하는) 일부 그림을 그리기 만하고 다음 페인트가 오기까지 잠시 기다려야 만합니다. – Robin
@Robin 감사합니다. +1도 훌륭한 대답입니다. –
기본적으로 루프 상태 (예 : 등)를 기억하고 추가를 중단해야합니다. 사용자가 스크롤 할 수있게하고, "일시 중지 해제"할 때 루프를 다시 시작할 수 있습니다.
또는 SwingWorker
등을 사용하여 별도의 스레드에서 루핑을 수행하여 UI 스레드에 마샬링하여 UI에 영향을주고 다른 스레드에서 잠자기합니다. 그것은 UI에 영향을 미치지 않습니다. 그것은 꽤 까다롭게 될 가능성이 높습니다.
불행히도 코드 스 니펫을 게시하지 않았으며 문자 영역을 아래로 스크롤 할 수 없다는 것이 무엇인지 명확하게 설명하지 않았습니다.
그러나 나는 UI 스레드에서 sleep()
을 호출하기 때문에 UI가 고정되어 있다고 가정 할 수 있습니다. 아마도 그것은 오버로드 된 paint()
또는 repaint()
메소드에서 호출되었을 것입니까? 내 추측이 맞다면 별도의 스레드에서 루프와 수면을 시도하십시오. 아마도 SwingWorker
을 사용할 수 있습니다.
자세한 내용을 알려면 자세한 정보가 필요합니다.
필자는 패널에 무언가를 칠해 보겠습니다. 6 개의 원을 말하며 각각에 대해 몇 가지 정보가 있습니다. 또 다른 패널에는 textArea가 포함되어 있습니다. 루프가 일시 중지되면 다른 패널에서 textArea를 클릭하고 끝까지 스크롤 할 수 있기를 원합니다. – sonya
UI 스레드에서 sleep
으로 전화하면 안됩니다. 이는 방금 발견 한 모든 UI 관련 작업을 차단하기 때문에 발생합니다.
UI의 일반적인 유스 케이스는 작업자 스레드 (예 : SwingWorker
클래스에서 제공됨)에서 많은 작업을 수행하고 작업이 완료되면 (또는 일정 간격으로 진행률을 표시하기 위해) UI를 업데이트하는 것입니다. .
특정 간격으로 몇 가지 코드를 실행하려면
, 당신은 올바른 스레드에서 해당 코드를 실행하고 두 실행 사이의 자유로운 UI 스레드를 떠날 것Timer
(스윙 변형이 아닌
java.util
버전)을 사용합니다.
대단히 감사합니다! 나는 자바 초보자이며 응답은 매우 유용했습니다. 이제 작동합니다! – sonya
- 1. Untracking 브랜치가 -f로 끝났지 만 여전히 커밋을 볼 수 있습니다.
- 2. 이동 한 후에도 여전히 비디오를 볼 수 있습니다.
- 3. Entity Framework 하위 삭제 - 여전히 부모에서 행을 볼 수 있습니다.
- 4. 단어 줄 바꿈없이 여전히 텍스트를 표시하고 스크롤 할 수 있습니다.
- 5. 루프를 일시 중지 할 수 없습니다 .. 어떻게?
- 6. ListView에서 텍스트를 볼 수 없습니다.
- 7. 대화 상자의 TextView 스타일은 froyo의 텍스트를 볼 수 없지만 ics로 볼 수 있습니다.
- 8. CSS 별을 볼 수 있습니다.
- 9. SearchView 위젯 제안에서 텍스트를 볼 수 없음
- 10. IsolationLevel.Snapshot을 사용하지만 DB가 여전히 잠겨 있습니다.
- 11. 이전 목록보기가 여전히 있습니다.
- 12. C/C++에서 루프를 일시 중지하는 방법
- 13. setInterval은 for 루프를 일시 중지 시키려면 어떻게해야합니까?
- 14. 은 네트워크상의 사이트를 볼 수는 없지만 로컬로 볼 수 있습니다.
- 15. pdf 문서를 노틸러스에서 볼 때 터미널에서 볼 수 있습니다.
- 16. 안드로이드 : 고정 된 경고가 여전히 이클립스 res/values에서 볼 수 있습니다.
- 17. 프로그램을 리눅스에 일반적인 디렉토리로 볼 수 있습니다.
- 18. 안드로이드지도는 그래픽 레이아웃으로 볼 수 있습니다.
- 19. 특정 계급의 회원 만 볼 수 있습니다
- 20. 하나는 심비안 코드를 볼 수 있습니다
- 21. 테스트에서 WCF 위치를 볼 수 있습니다.
- 22. 특정 번호의 NSWindow 복사본을 볼 수 있습니다.
- 23. asp.net 무단으로 단일 페이지를 볼 수 있습니다.
- 24. 제한된 화면 내에서만 UIView를 볼 수 있습니다.
- 25. 확장 프로그램이없는 브라우저에서 이미지를 볼 수 있습니다.
- 26. 마치 Mac에서 웹 사이트를 볼 수 있습니다.
- 27. 파생 클래스에서 private typedef를 볼 수 있습니다.
- 28. 표시되는 모든 페이지를 볼 수 있습니다.
- 29. Jersey 상태 코드로 볼 수 있습니다.
- 30. JQuery와 슬라이더 값은 코드를 볼 수 있습니다
루프가 수행중인 모든 작업을 다른 스레드로 처리해야합니다. 이 질문에 근거하여 사람들이 대답하기가 어려울 것입니다.타이머를 호출 할 때마다 타이머를 만들고 루프 의무를 수행하는 것이 좋습니다 (수면 시간과 동일한 간격으로 타이머를 설정하십시오). . 잠자기 전에 루프를 두 번 이상 수행 한 경우 타이머 호출 중에 여러 번 루프를 수행하십시오. –
** 스레드 **를 사용하십시오. –