【问题标题】:frame shows black screen框架显示黑屏
【发布时间】:2012-01-02 06:38:01
【问题描述】:
btnnew.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            try {
                System.out.println("Hello");
                packetListener.listener();
            } catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
    });

运行时出现黑屏。但是当 packetListener.listener(); 在构造函数中调用时,它会显示出来。

你能解释一下为什么会这样吗?

【问题讨论】:

    标签: java swing listener concurrency


    【解决方案1】:

    从侦听器执行的代码在 EDT 上执行。我猜 packetListner.listener() 方法会阻塞,在这种情况下 GUI 会冻结。你不应该阻止 EDT。

    阅读 Concurrency 上的 Swing 教程部分,了解有关此问题的完整描述和解决方案。

    【讨论】:

      【解决方案2】:

      我认为packetListener.listener(); 方法会执行一些复杂的操作,从而阻塞您的 UI。

      最好创建一个线程来监听数据包。 即,像这样使用它

       try {
          System.out.println("Hello");
          new Thread(new Runnable() {
              public void run() {
      packetListener.listener();
                  }
          }).start();         
      
              } catch (Exception e1) {
                  // TODO Auto-generated catch block
                  e1.printStackTrace();
              }
      

      希望对你有帮助

      【讨论】:

      • @user1089146,我在一周前给了你这个答案。本教程解释了您的确切问题,解释了为什么需要使用单独的线程。它甚至提供了一个使用 SwingWorker 的工作解决方案,它为您创建线程,使代码更容易。
      猜你喜欢
      • 1970-01-01
      • 2011-01-11
      • 2012-01-15
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多