Java JFrame没有出现在ubuntu中

Java JFrame没有出现在ubuntu中,java,swing,ubuntu,Java,Swing,Ubuntu,当我在ubuntu中运行此代码时,窗口被最小化。当我点击它的图标时,它保持最小化。 但它在Windows中运行良好 这是我的密码 import javax.swing.*; public class FrameTest { public static void main(String args[]) { JPanel p = new JPanel(); JButton b = new JButton("Button 1"); p.

当我在ubuntu中运行此代码时,窗口被最小化。当我点击它的图标时,它保持最小化。 但它在Windows中运行良好

这是我的密码

import javax.swing.*;

public class FrameTest
{
    public static void main(String args[])
    {
        JPanel p = new JPanel();
        JButton b = new JButton("Button 1");
        p.add(b);

        JFrame f = new JFrame("TestFrame");
        f.add(p);

        f.setVisible(true);
        f.setSize(500,500);
    }
}
请帮助。

放入
f.setSize(500500)
between
JFrame f=newjframe(“TestFrame”)
f.add(p)。不能调用
f.setVisible(true)在JFrame完全构建和初始化之前。我还建议在JPanel/JFrame中使用LayoutManager,例如BorderLayout

import java.awt.BorderLayout;

import javax.swing.*;

public class FrameTest
{
    public static void main(String args[])
    {
        JPanel p = new JPanel();
        BorderLayout bl = new BorderLayout(0, 0);
        p.setLayout(bl);

        JButton b = new JButton("Button 1");
        p.add(b, BorderLayout.CENTER);

        JFrame f = new JFrame("TestFrame");
        f.setSize(500,500);
        f.getContentPane().add(p);
        f.setVisible(true);
    }
}

f、 pack()?您需要调用
f.pack()
f.setSize(…)
f.setVisible(true)
之前<代码>设置可见()
应该是使GUI可见时的最后一行。。。这是我第一次看到的,但无法测试,因为我没有在这里安装Ubuntu Swing/AWT GUI应该在事件调度线程上启动。这可能不是问题所在,但无论如何都要使用最佳实践。此外,正如@mko所提到的,我们应该在添加所有组件之后,但在
setVisible(true)
之前,使用
pack()
来调整GUI的大小。移除
f.setSize(500500)-这只是猜测。你的代码没有什么特别的错误(但我同意Andrew的观点,你应该在EDT上启动UI),我不能复制你的问题“你不能调用f.setVisible(true);在JFrame完全构建之前”——你可以,但你需要重新验证并重新绘制组件。“我还建议在JPanel/JFrame(如BorderLayout)中使用LayoutManager。”-所有基于窗口的类默认为
BorderLayout
;我们不必使用
getContentPane().add
,因为Java 1.6,
JFrame\add
将调用转发到
contentPane
;在窗口可见后更改窗口的大小对结果应该没有影响,但可能会使框架在第一次加载时看起来像是“弹出的”