스윙 스레드를 제대로 돌려 보내지 않습니다. 나는 당신이 callable/runnable을 사용하고 있다는 것을 알았지 만, 당신이 옳은 일을하고 있지 않다고 생각하고있다. (확실히 알기에 충분한 코드를 게시하지는 않았지만).
기본 구조는 다음과 같습니다
이
swingMethod() { // Okay, this is a button callback, we now own the swing thread
Thread t=new Thread(new ActuallyDoStuff());
t.start();
}
public class ActuallyDoStuff() implements Runnable {
public void run() {
// this is where you actually do the work
}
}
이건 그냥 내 머리 위로 떨어져,하지만 난 당신이 중 하나가 thread.start를 수행하지 않는 대신 run 메소드를 호출 같은데요 직접적으로, 또는 그것을 고정시키는 첫 번째 메소드에서 (thread.join과 같이) 다른 작업을하고있는 경우. 이들 중 어느 것도 스윙 스레드를 해제하지 않습니다. 첫 번째 메서드는 신속하게 반환해야하며 run() 메서드는 원하는만큼 오래 걸릴 수 있습니다.
첫 번째 메서드에서 thread.join을 수행하는 경우 스레드가 시스템에 반환되지 않습니다!
편집 : (실제로 두 번째 편집) 나는 실제로 느끼는 문제에 대해 말하고 싶다. 모델/뷰/컨트롤러 시스템에 관해 더 생각하고 싶을 것이다. 작성중인 코드는 컨트롤러입니다 (보기는 일반적으로 화면의 구성 요소로 간주됩니다 -보기/컨트롤러는 일반적으로 매우 단단합니다).
컨트롤러가 이벤트를 받으면 모델에 작업을 전달해야합니다. 보기가 그림에서 빠져 나옵니다. 모델을 기다리지 않고 방금 완료했습니다.
모델이 완성되면 컨트롤러에 다른 작업을 지시해야합니다. 이것은 invoke 메소드 중 하나를 통해이를 수행합니다. 이것은 컨트롤러로 컨트롤을 다시 전송하고 당신은 즐거운 방법으로 이동합니다. 이런 식으로 생각하면 제어를 분리하고 의도적으로 앞뒤로 전달하는 것은 그렇게 부피가 크지 않으며 실제로 이렇게하는 것이 일반적입니다.
SwingWorker를 사용하는 방법을 나타내는 코드를 포함하면 도움이 될 수 있습니다. –
동의; 우리에게 문제가되는 코드를 보여주십시오. – Rob