public class Signal2NoiseRatio
{
public ImagePlus SingleSNR(ImagePlus imagePlus) throws InterruptedException
{
new Thread()
{
@Override public void run()
{
JFrame imageFrame = new JFrame("ROI");
Container imageFrame_Container = imageFrame.getContentPane();
IIImagePanel imagePanel = new IIImagePanel();
imageFrame_Container.add(imagePanel);
imagePanel.setImage(imagePlus.getImage());
imagePanel.getDisplayedImage();
imageFrame.setVisible(true);
final SNRSingleImageListener sNRSingleListener = new SNRSingleImageListener(imagePanel);
imagePanel.addMouseListener(sNRSingleListener);
imagePanel.addMouseMotionListener(sNRSingleListener);
}
}.start();
new Thread()
{
@Override public void run()
{
for (int i = 0; i <= 2000; i++)
{
System.out.println("schleife "+i);
// ask if useractions are done ..
}
synchronized(Signal2NoiseRatio.this)
{
Signal2NoiseRatio.this.notifyAll();
}
}
}.start();
synchronized (this)
{
this.wait();
// if userinteractions are done, go on
}
return imagePlusToProcess;
}
}
첫 번째 new Thread()
은 이미지를 표시하는 프레임을 수행합니다. 나의 의도는 새로운 스레드에 이미지를 제시하여 이미지의 일부 사용자 상호 작용을 기다리는 것이 었습니다. 그러나 코드는 프레임을 흰색 윈도우로 유도하고 이미지는 보이지 않으며 프레임을 사용할 수 없습니다.Java 병렬 스레딩
사용자 작업이 완료되면 짧은 간격으로 질문하고 싶습니다.
정말 좋은 해결책은 아니지만 가능합니까? 여기서 뭐가 잘못 됐니?
Thank you stackoverflow!
'IIImagePanel' 클래스는 스레드없이 작동합니까? – martijno
이벤트 디스패치 스레드가 아닌 다른 스레드에서 Swing 구성 요소를 만들거나 액세스 할 수 없다는 것이 한 가지 문제입니다. 둘째,'notifyAll()'호출은 결코'synchronized' 블록 안에 있기 때문에 결코 실행되지 않습니다. 나는 당신이 찾고있는 것을 믿고, 그 중 어떤 것도 동기화 된 블록이 필요하지 않습니다. –
IIImagePanel은 스레드없이 작동합니다. – hagem