0
JOptionPane
에서 실행중인 주 스레드로 변수를 설정하는 방법을 알아 내려고하고 있습니다. JOptionPane
대화 상자의 결과에 따라 이것은 주 스레드의 일부 논리에 영향을 미칩니다. 다음은 대략적인 예입니다.JOptionPane에서 스레드에 대한 비동기 통신
public class MainThread {
public static void main(String[] args) {
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTask(), 0, 1000);
}
}
public class MyTask extends TimerTask {
int x = 0;
AsyncPopUp popUp = new AsyncPopUp();
public void run() {
// code to detect reset here
// x = 0;
x++;
System.out.println(x);
if (x==10){
new AsyncPopUp().showMessage();
}
}
}
public class AsyncPopUp {
void showMessage() {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
int response = JOptionPane.showConfirmDialog(null, "Reset Counter?",
"Question", JOptionPane.YES_NO_OPTION);
if (response == 0){
System.out.println("Send Message to task to reset");
}
}
});
t.start();
}
}
나는 아마도이 잘못된 방향으로 가고 있습니다. 아마도 JPanel
에 ActionListener
을 사용해야합니까? 또는 SwingWorker
?
감사합니다.
나는이 작업을 할 수 있습니다 생각 -이 나쁜 방법입니다 알려줘 : 내가 제대로 이해하면
public class Async {
private Boolean response = false;
private Thread t;
public void start() {
new Timer().schedule(new TimerTask() {
int x = 0;
@Override
public void run() {
System.out.println(x);
if (x == 10) {
t = new Thread(new DoTask());
t.start();
}
if (response == true) {
System.out.println("true");
x = 0;
response = false;
} else {
System.out.println("false");
}
x++;
}
}, 0, 1000);
}
public class DoTask implements Runnable {
@Override
public void run() {
int optionResponse = JOptionPane.showConfirmDialog(null,
"Reset Counter?","Question", JOptionPane.YES_NO_OPTION);
if (optionResponse == 0) {
response = true;
}
}
}
}
당신이 실제로 달성하기 위해 노력하고 무엇 ...
if (response == JOptionPane.YES_OPTION)
이if (response == 0)
보다 더 낫 네요 있습니다? 게시 한 코드 (AsyncPopup가 묵시적으로 작동한다고 가정)는 10 초 후, 매초마다 팝업을 표시합니다. 귀하의 질문에 문구가 반대 (메인 스레드의 개체에 대한 상태를 업데이 트하는 팝업을 보여주는) 그래도 의미합니다. – SimonC체크 아웃 http://docs.oracle.com/javase/7/docs/api/java/awt/SecondaryLoop.html – MahdeTo
간단한 카운터 인 메인 루프가 있습니다. 메인 루프를 멈추지 않고 사용자로부터 입력을 얻으려고합니다. 대화 상자의 응답은 주 루프에 영향을 미칩니다. 이 예제에서는 10 초 후에 주 루프를 일시 중지하지 않고 팝업 대화 상자가 나타납니다 (x == 10). x == 10 일 때만 나타납니다. 카운터를 재설정해야 하는지를 결정하기 위해 대화 상자의 응답이 필요합니다. 그러나 응답을 기다리는 동안 카운터를 계속 사용해야합니다. 내 문제를 해결할 수있는 SecondaryLoop 링크를 확인합니다. –