我对Linux完全陌生,并且一直在尝试使我的(建立Windows的)Java Swing项目在XUbuntu上与我构建的可执行jar文件不同的机器上正常工作。
我已将问题减少到最少的代码
import java.awt.Dimension;
import javax.swing.*;
public class JFrameTest extends JFrame {
public JFrameTest(String title) {
super(title);
JLabel lab = new JLabel("Label");
this.getContentPane().add(lab);
this.setMinimumSize(new Dimension(200, 200));
this.pack();
this.setVisible(true);
}
public static void main(String args[]) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JFrameTest frame = new JFrameTest("Title");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
在Windows上,我看到:
在Xubuntu中,我仅看到一个灰色框和标签,而不是Title(标题)或关闭图标等。在从命令行按ctrl键之后,我还必须杀死(-9)jvm。我用java -jar filename.jar启动了它
我的Linux机器正在运行Xubuntu11。我已经安装了sun Java 6_24 JRE。我对此进行了谷歌搜索,发现与Compziz(?)类似的东西,但是据称这是在不久前修复的。我现在有点卡住了。我有一个可以正常运行的Swing应用程序,它可以对按钮进行响应,但仍然不显示标题等。我们将不胜感激。
最佳答案
我不使用Xubuntu,但是一般规则是,任何更新GUI的代码都应在事件调度线程上执行。请参见Swing教程中关于Concurrency的部分。
Swing教程中的示例均使用如下格式:
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
public class SSCCE extends JPanel
{
public SSCCE()
{
add( new JLabel("Label") );
}
private static void createAndShowUI()
{
JFrame frame = new JFrame("SSCCE");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add( new SSCCE() );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible( true );
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
createAndShowUI();
}
});
}
}