Java JFrame的内容未显示

Java JFrame的内容未显示,java,swing,jframe,joptionpane,thread-sleep,Java,Swing,Jframe,Joptionpane,Thread Sleep,当用户在一个JFrame-frame中点击“close”时,我希望在程序退出前显示JFrame-credits显示我的姓名和内容2.5秒。现在,credits正在显示,但如果没有textArea和按钮,则显示为空,无法找到问题所在 这是我的密码: 对于帧的关闭操作 frame.addWindowListener(new java.awt.event.WindowAdapter() { @Override public

当用户在一个
JFrame-frame
中点击“close”时,我希望在程序退出前显示
JFrame-credits
显示我的姓名和内容2.5秒。现在,
credits
正在显示,但如果没有
textArea
按钮,则显示为空,无法找到问题所在

这是我的密码: 对于
帧的关闭操作

frame.addWindowListener(new java.awt.event.WindowAdapter() {
                    @Override
                    public void windowClosing(java.awt.event.WindowEvent windowEvent) {
                        int result = JOptionPane.showConfirmDialog(null, "Sind Sie sicher?", "Schließen", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
                        if (result == JOptionPane.YES_OPTION){
                            credits.setVisible(true);
                            try {
                                Thread.sleep(2500);
                            } catch(InterruptedException ex) {
                                Thread.currentThread().interrupt();
                            }
                                System.exit(0);
                        } else {
                            //do nothing 
                        }
                    }
                });
对于
学分
(仅初始化帧的类):

}

有什么快速修复的建议吗?谢谢

有什么快速修复的建议吗

是的,不要在Swing事件线程上调用
Thread.sleep(…)
,除非您想让整个GUI进入睡眠状态。相反,使用一个函数来处理延迟。基本上,计时器的ActionListener将在毫秒延迟过后调用

e、 g

还有,看看

未来会影响你的其他问题:

  • 您似乎正在使用空布局和设置边界。虽然null layouts and setBounds()似乎是创建复杂GUI的最简单、最好的方法,但您创建的GUI越多,在使用它们时遇到的困难就越严重。当GUI调整大小时,它们不会调整您的组件的大小,它们是一个需要增强或维护的皇家巫婆,它们在滚动窗格中完全失败,在所有不同于原始平台的平台上查看时,它们看起来非常糟糕
  • 永远不要设置JTextAreas边界,因为如果将其放置在JScrollPane中并且添加了超出显示范围的文本,则会使其完全失败——滚动条似乎不起作用,因为您人为地限制了文本组件的大小

您能否发布实例化
credits
变量的代码?我知道绝对布局非常不一致,但框架无法调整大小,因此至少不会弄乱它们。谢谢你提出的解决方案,做了一些调整。@Zi1mann:别说我没有警告你。只需等待你创建一个复杂的GUI,然后发现你需要在中间添加一个更多的JReloBut纽。如果将嵌套的JPanel与布局管理器一起使用,那么这将是一个非常简单的修复方法。如果使用空布局,则必须手动调整每个组件的位置,并希望它能在所有平台上工作。运气。
public class CreditsFrame extends JFrame {

Positioner pos = new Positioner();

private JPanel contentPane;
ImageIcon frameIcon = new ImageIcon("files/images/frameicon.png");
/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                CreditsFrame frame = new CreditsFrame();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public CreditsFrame() {
    setIconImage(frameIcon.getImage());
    setAlwaysOnTop(true);
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(pos.posX(pos.screenX, 441), pos.posY(pos.screenY, 210), 441, 210);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);

    JTextArea txtarea = new JTextArea();
    txtarea.setBounds(10, 11, 415, 125);
    txtarea.setEditable(false);
    txtarea.setBackground(Color.WHITE);
    txtarea.setWrapStyleWord(true);
    txtarea.setLineWrap(true);
    txtarea.append("created by & more here");
    contentPane.setLayout(null);
    contentPane.add(txtarea);

    JButton btnOk = new JButton("Ok");
    btnOk.setBounds(154, 147, 89, 23);
    btnOk.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            dispose();
        }
    });
    contentPane.add(btnOk);
}
frame.addWindowListener(new java.awt.event.WindowAdapter() {
    @Override
    public void windowClosing(java.awt.event.WindowEvent windowEvent) {
        int result = JOptionPane.showConfirmDialog(null, "Sind Sie sicher?", "Schließen", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
        if (result == JOptionPane.YES_OPTION){
            credits.setVisible(true);
            new Timer(2500, new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    System.exit();
                }
            }).start();
        } else {
            //do nothing 
        }
    }
});