主线程仍在运行时如何使用线程运行另一个JFrame

时间:2019-05-10 18:06:06

标签: java multithreading jframe

我有一个要在主框架运行时显示的jframe。我想暂停我的主要代码,直到用户在另一帧上执行必要的操作为止。我已经阅读了很多解决方案,但是我需要看到它完成后,我的代码才能完全理解和掌握它。我不想像以前看到的那样使用jdialog作为答案。我的主要目标是了解更好的线程,以便我可以在不同情况下使用所学到的知识。

使用我创建的代码,运行线程时,仅框架加载,框架上没有其他功能。 (框架很简单,它具有标签,用户从中选择的列表以及基本上返回所选列表值的按钮。)就像线程从完成中被切断一样。

这是我的课在叫屏幕:

public class myThread implements Runnable {

    String result = null;

    public void run() {
        MessageScreen ms = new MessageScreen();
        ms.setVisible(true);
    }

    public String getResult() {
        return result;
    }

    public void setResult(String AS) {
        result = AS;
    }

}

在我的主代码中,调用了一个返回String []值的方法,在此方法的某个点上,我有以下代码调用新线程以获取返回原始主方法所需的值: / p>

    myThread mt = new myThread();
    Thread t = new Thread(mt);
    t.start();
    try {
        t.join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    myreturn = new String[] {"true", mt.getResult()}; 

没有列出第二帧的全部代码,当用户按下按钮时,在与按钮绑定的侦听器的末尾,按下i,我想关闭帧并返回从列表中选择的字符串:

jf.dispose();
myt.setResult(AdminSelection);

在框架类中,我声明了以下实例变量:

String AdminSelection = null;
myThread myt; 

我希望这对某人有足够的信息,可以帮助我并了解这里出了什么问题。

1 个答案:

答案 0 :(得分:0)

join()函数要等到run()方法的结尾,当您执行t.join()时,您的线程已经或即将结束。这是因为在用户单击确认按钮之前,在run()方法中没有阻塞线程的内容。而且最好是这样!

在这里创建线程是没有意义的,您应该使用回调,或更普遍地在Java中使用侦听器。您可以查看以下链接:https://guides.codepath.com/android/Creating-Custom-Listeners

但是,特别是如果您想暂停主代码,则应该使用为此而设计的JDialog!不要试图自己阻止UI,您可能会错误地阻止UI线程(由Swing / AWT处理)。创建JDialog更好,因为在UI线程上已经为此使用做好了一切。

此外,您必须知道创建线程的时间很长,请在需要时使用线程。