gpt4 book ai didi

java - JFrame 中的 JFileChooser 使 setVisible() 卡住

转载 作者:行者123 更新时间:2023-11-29 07:42:00 26 4
gpt4 key购买 nike

我的任务是将 JFileChooser 显示为 JFrame 的一部分。因此,将其显示为对话框已经过时了。

我正在使用最基本的方法将它作为一个组件添加到一个不可见的框架中,然后 setVisible() 调用卡住而不是显示框架。

最让我恼火的是,十分之一的框架与 FileChooser 一起出现时很好。这让我觉得这是一个并发问题。

这是仍然存在问题的最小源代码。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

class ApplicationFrame extends JFrame {
JFileChooser fileChooser;

public ApplicationFrame(String frameName) {
super(frameName);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());

fileChooser = new JFileChooser();
fileChooser.setControlButtonsAreShown(false);
panel.add(fileChooser, BorderLayout.CENTER);

getContentPane().add(panel);
}
}

public class lab7{
public static void main(String args[])
{
ApplicationFrame windowForApplication = new ApplicationFrame("lab7");
windowForApplication.setSize(600,600);
windowForApplication.setVisible(true);
}
}

如果您在最后的 setVisible 之后放置一个 println,它不会被调用。

如果您注释掉 panel.add(),框架会正常显示。

我还应该做什么来显示文件选择器?

最佳答案

What irks me the most is that one time out of ten the frame appears with the FileChooser just fine.

所有 Swing 组件都应该在 Event Dispatch Thread 上创建。因此,GUI 创建代码应该包装在 SwingUtilities.invokeLater(...) 中。

阅读 Concurrency 上的 Swing 教程部分获取更多信息以及如何完成此操作的示例。

您的代码(按原样)实际上对我没有问题。我在 Windows 7 上使用 JDK7,所以它可能是版本/平台问题。再次确保代码在 EDT 上执行。

另外,类名(“lab7”)应该以大写字符开头。这是否是 SSCCE 并不重要,请保持一致。

关于java - JFrame 中的 JFileChooser 使 setVisible() 卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29151013/

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