java - 从另一个 JFrames 构造函数创建 JFrame

标签 java swing jframe

我有 3 个扩展了 JFrame 的对象,我们称它们为 FrameA FrameB FrameC

FrameA 是我的主应用程序窗口。如果应用程序未注册,我会从 FrameA 的构造函数创建 FrameBFrameC。它们只是指示试用期的弹出窗口。

十分之二的应用程序卡住并且从不显示 B 和 C 帧,并且 A 帧变得无响应。

我想知道以这种方式创建框架是否有副作用?

最佳答案

那是因为您没有让 FrameA 完成其构建过程,您正在中断它,然后在同一线程中显示其他两个框架。

我建议更改您的策略并使用工厂方法,并可能与 SwingUtilities.invokeLater 方法结合使用。

假设您有类似的内容:

 public static void main( String [] args ) {
      JFrame a = new FrameA(); // Has both display logic and trial "pop up" logic
 }

将其更改为:

 public static void main( String [] args ) {
      JKFrame a = FrameA.createFrame(); // the same but splited like the following code 
 }


 class FrameA extends JFrame {
      // new method
      public static JFrame createFrame() {
            return new FrameA();  

      }
 }

没有任何改变,您只是添加了工厂方法,稍后您可以:

         public static JFrame createFrame() {
            if( thatSpecialLogicSaysItIsTrialAndShouldPopUp() ) {
                  JFrame b = new FrameB();
                  b.setVisible( true );
                  JFrame c = new FrameC();
                  c.setVisible( true );
                  return new FrameA();

           } else {
            return new FrameA();
           }  

      }

您将在第二个代码中执行的操作是将逻辑与类构造函数分开并将其放入工厂方法中。这样,如果 thatSpecialLogicSaysItIsTrialAndShouldPopUp 返回 true,则显示 B 和 C

您也可以按照描述在那里使用 JDialog,但是当您分离职责时,几乎问题就会消失。

关于java - 从另一个 JFrames 构造函数创建 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1263660/

相关文章:

java - 如何从 jlist 中删除一个项目

java - 如何获取类层次结构中较低层的类的对象

java - 如何删除 HttpServletRequest 参数(在 JSP 中)?

java - 具有对数概率 Java 实现的数值精度

java - 以编程方式添加的元素未出现在 fragment 中

java - JDialog setVisible(false) vs dispose()

java - 只有一个类的构建器模式

java - Swing 计时器和耗时任务

java - 图形的最小代码?

java - 在JAVA中添加工具栏到GUI