gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:04:51 27 4
gpt4 key购买 nike

我有 3 个扩展 JFrame 的对象让我们调用他们 FrameA FrameB FrameC .
FrameA是我的主应用程序窗口。来自 FrameA的构造函数如果应用程序未注册我创建 FrameBFrameC .它们只是表明试用期的弹出窗口。

10 次应用程序中有 2 次卡住并且从不显示 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com