当前位置: 首页 > 面试题库 >

平开窗被冻结,不显示内容

薛俊美
2023-03-14
问题内容

public class Main extends JFrame{

JLabel lb1,lb2,lb3,lb4;
Button b,b1;
public Main()
{
    setLayout(null);
    Container c=getContentPane();
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    getContentPane().setBackground(Color.red);

    setVisible(true);





    b1=new Button("CONTINUE");
    b1.setFont(new Font("Algerian", 1, 20));
    b1.setForeground(Color.black);  
    b1.setBounds(550, 480, 200,40);
    b1.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent ae)
      {  setVisible(false);       
           try {
            new Frame();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


      }
    });




    c.add(b1);

    setSize(1290,900);

}

public static void main(String...s) throws InterruptedException
{
    new Main();


}
}

这是主类,这是它调用的框架类。

public class Frame extends JFrame{


Frame() throws InterruptedException
{ 
JFrame f=new JFrame();
f.setVisible(true);
f.setLayout(null);
f.setBounds(0,0,200,200);

Container p=f.getContentPane();

p.setBackground(Color.GREEN);
f.setResizable(false);

Thread.sleep(5000);

    setVisible(false);
    new Frame1();

}

}

主类调用框架类..它需要保持一段时间,然后再移到另一个框架..但是发生的是主类调用它,该框架出现了,但是其中没有内容。显示,然后移至frame1()//

但是如果我像

新的Frame();

然后按住,显示内容,然后移动。

那么为什么在Main()调用Frame()时它不起作用?

甚至这段代码也不起作用..而不是Thread.sleep()…这样,我不会阻塞任何偶数线程。

for(double i=0;i<30;i++)
{


    for(double j=0;j<10000;j++)
    {


    }
}

新的Frame1();


问题答案:
  1. Swing在称为的单个线程内完成GUI渲染任务Event Dispatch Thread(EDT)。您可能需要一段时间才能做的任何事情都会阻止EDT,并且您的swing应用程序将被冻结。您通过以下一种说法正在做这样的事情:

    Thread.sleep(5000);
    
  2. 始终建议不要使用它NullLayout。了解Swing开发人员通过辛勤工作为我们创建的适当的布局管理人员。让我们给他们的努力一些价值。

  3. 使用函数将GUI渲染任务(包括在内framesetVisible(true)放入EDT中SwingUtilities.invokeLater。例如:

    SwingUtilities.invokeLater(new Runnable() {
    
        @Override
        public void run() {
           new MyWindow().setVisible(true);
        }
    });
    
  4. 您正在使用多重框架。Swing系列的 也禁止这样做 。Card Layout家庭可以使用许多替代方法,您可以轻松地避免不必要地使用多帧。给Andrew Thompson定链接的答案中给出了一些示例



 类似资料:
  • 例如,如果安装龙卷风与pip像这样: 不会返回列表中的tornado包,它只显示: 另外,当我运行时,它会返回: 出什么事了?

  • 我尝试使用OpenGL绘制贝塞尔曲面。我的程序读取一个输入文件,其中包含用于绘图的采样点数量、用于表面着色的控制点和调色板。它必须输出一个带有曲面图的新窗口,我可以在其中操纵曲面和控制点的属性。 从Bernstein多项式生成的点被三角化,并通过从三角形的最小和最大高度映射它来按调色板分配颜色。 不幸的是,它打开了一个窗口,其中当前窗口的一部分在操作系统中打开,而没有为surface创建新界面。

  • 我有一个简单的聊天客户端,我正试图使用作为界面。我的问题是,使用进行聊天输入/输出后,窗口将冻结并阻塞,直到收到另一条消息。 这段代码被缩短了,但是显示了相关的部分。小部件将在很长一段时间内变得无响应,而被调用之后,直到收到消息才会响应。 当小部件再次响应时,条目字段包含输入的所有数据,但在“冻结”时间内我看不到更改。小部件也是如此。 如果有人能解释一下为什么会这样,或者指出我是否错过了这里使用的

  • 在过去的几天里,我一直在解决这个问题。尝试在

  • 我正在使用Linux并试图学习OpenGL。我参考了learnopengl.com网站,并在这里编译了第一个可用的程序。 我似乎在编译程序时没有遇到命令问题 但是当我运行程序时,它会从后面显示东西,而不是像这样的空白窗口 但是请注意,此窗口不透明,因为如果我移动窗口,背景是相同的。但是,如果我最小化并重新打开窗口,则背景是新创建的。专用和集成 GPU 都会发生这种情况。 我需要做什么才能使它正常工

  • 问题内容: 我正在尝试并行化脚本,但是由于未知的原因,内核只是冻结而没有引发任何错误。 最小的工作示例: 有趣的是,如果我在另一个文件中定义函数然后将其导入,则一切都可以正常工作。如何使它工作而无需另一个文件? 我使用spyder(anaconda),如果从Windows命令行运行代码,则结果相同。 问题答案: 发生这种情况是因为在子进程导入时,您没有保护代码的“过程”部分免于重新执行。 它们需要