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()//
但如果我像
一样跑new Frame();
然后它成立,显示内容,然后移动..
那么为什么当Main()调用Frame()时它不起作用?
即使这段代码也没有'工作..而不是Thread.sleep()......这样我就不会阻止任何线程......我是吗?
for(double i=0;i<30;i++)
{
for(double j=0;j<10000;j++)
{
}
}
new Frame1();
答案 0 :(得分:3)
Swing在称为Event Dispatch Thread(EDT)
的单个线程中执行GUI渲染任务。你做的任何可能需要一段时间的事情都会阻止EDT,你的挥杆应用程序将被冻结。你正在通过以下陈述做出这样的事情:
Thread.sleep(5000);
始终建议不要使用NullLayout
。通过他们的努力学习Swing开发人员为我们创建的正确layout mangers。让我们为他们的努力付出一些价值。
使用frame
功能将您的GUI渲染任务(包括setVisible(true)
的{{1}})放入EDT中。例如:
SwingUtilities.invokeLater
您正在使用多帧。由Stack Overflow的Swing家族提供的It is also prohibited。家庭使用SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MyWindow().setVisible(true);
}
});
显示了许多工作,您可以轻松采用这些工作来避免不必要地使用多个帧。在给定链接的Card Layout
的答案中给出了一些示例。