약간의 문제가 있습니다. 이제는 작은 Java 프로젝트에서 작업해야합니다. Button 이벤트 핸들러에서 몇 개의 스레드를 실행하려고합니다. 마지막 스레드 중 하나는 UI에서 TextArea를 업데이트해야합니다. 스레드는 전산 작업을하고 있습니다. 가장 중요한 부분은 UI woks를 잘 만드는 것입니다. UI를 고정시키고 싶지 않고 물론 다른 스레드 중 하나에서 UI의 TextArea를 정기적 인 간격으로 업데이트하려고합니다 (UI의 것이 아닌). 버튼의 이벤트 핸들러 내부Java : 일부 비동기 작업을 시작하고 다른 스레드에서 UI를 업데이트하는 방법은 무엇입니까?
내가이 4 개 개의 스레드를 시작 해요 :
Thread generate = new CombinaMaker();
generate.run();
Thread forward = new TranslateForward();
forward.run();
Thread backward = new TranslateBackward();
backward.run();
Thread refresh = new Refresher();
refresh.run();
내가 스레드가 동시에 작업 할 그래서 여기 내 코드의 일부이다. 리프레셔 스레드는 UI TextArea 구성 요소를 정기적으로 업데이트해야합니다.
public static void updateProgress()
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
//HERE
//I have a loop that have to be looping at every 500 ms
}
}
}
내 qustion은 다음과 같습니다 : 그 링크이 일을 하죠 그래서, 여기에
내가 원기를 회복 스레드에서 UI를 업데이트하는 방법입니다? 나는 간단하고 효과적 일 필요가있다. 이 루프는 애플리케이션이 작동하는 한 루핑되어야하므로 슬프다. 이것이 UI를 정지시키는 이유일까요? 나는 어딘가에서 큰 실수를하고 있다는 것을 알고 있지만,이 순간 나는 그것을 혼자 발견 할 수 없다. 나에게 몇 가지 간단한 해결책을 제안 해 주시겠습니까? 그리고 마지막 생각 - 처음 4 개의 스레드 : 나는 UI를 동결하지 않고 '동시에'시작하고 싶습니다. 그런 식으로 (이벤트 처리기에서 이런 식으로 시작하는 ...) 올바른 것일 수도 있고 더 좋을 수도 있습니까? 고마워요. 많은 친구들!
추신. 내 '리프레셔'스레드를 통해 UI 새로 고침이 힘든 경우 타협을위한 준비가되었습니다. - 소유 스레드 (UI 스레드)를 통해 UI를 업데이트하십시오. 그러나이 경우에는 UI의 동결을 피하면서 '시간 촬영 메커니즘'을 사용해야 할 수도 있습니다. 너 무슨 생각해?
특히 코드에 어떤 문제가 있습니까? 다른 스레드 또는 TimerTasks를 사용하는 것은 기본적으로 수행해야하는 작업입니다. –
루프가 업데이트 진행 중 - UI가 멈추는 것을 피하는 방법? 타이머 작업? –
이것은 아마도 끔찍한 충고이지만 뷰 객체에 대한 참조를 다른 스레드로 전달한 다음 해당 스레드가 뷰에 직접 데이터를 추가하도록합니다. 작은 프로그램을 위해 충분히 잘 작동합니다. 내가 제품이나 뭐든지 발표 할 수 있을지 확신하지 못한다. – aglassman