看了一些书,知道awt在不同平台下回出问题,我就尽量使用swing,这次在xp下用虚拟机启动了linux(fedora),然后运行,竟然报错
报错信息如下:
(.:3104): GLib-GObject-WARNING **: invalid uninstantiatable type `<invalid>' in cast to `GtkWidget'(.:3104): Gtk-CRITICAL **: gtk_widget_hide: assertion `GTK_IS_WIDGET (widget)' failed以下是我的源文件,其实,很简单,就是在一个JDialog容器中放了一个JFilechooser,将其显示出来,刚刚看了一些文章,说ibm发现swing漏洞百出,没有办法才自己开发了swt,看来好像真的是这个样子的。我的代码如下:
//file:Jd1.java
/*
 * 创建日期 2005-9-23
 *
 * TODO 要更改此生成的文件的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
package field.ui;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.io.File;
public class Jd1 {
public static void main(String [] args){
System.out.println("ffffffff");
Jd1 jd1 = new Jd1();
}
//private StartFrame1 sf = null;
private File file1 = null;
public Jd1(){
this.jDialog = this.getJDialog();
this.jDialog.setVisible(true);
//this.sf = sf1;
}
private JDialog jDialog = null;  //  @jve:decl-index=0:visual-constraint="45,5"
private JPanel jContentPane = null;
private JFileChooser jFileChooser = null;
private JFileChooser getJFileChooser(){
if(this.jFileChooser == null){
this.jFileChooser = new JFileChooser();
jFileChooser.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("actionPerformed()");
file1 = jFileChooser.getSelectedFile();
jDialog.setVisible(false);
}
});
}
return this.jFileChooser;
}
/**
 * This method initializes jDialog
 *
 * @return javax.swing.JDialog
 */
private JDialog getJDialog() {
if (jDialog == null) {
jDialog = new JDialog();
jDialog.setSize(new java.awt.Dimension(419,285));
jDialog.setTitle("Select File");
jDialog.setContentPane(getJContentPane());
}
return jDialog;
} /**
 * This method initializes jContentPane
 *
 * @return javax.swing.JPanel
 */
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(this.getJFileChooser(),BorderLayout.CENTER);
}
return jContentPane;
}}

解决方案 »

  1.   

    为何在windows下可以正常运行呢?
      

  2.   

    如果是我写,没得到处***,因为我就会在WINDOWS下看看电影.其他系统没用过!!
      

  3.   

    java的图形是比较滥的东西,好像没人会用java开发窗口程序吧。
    所谓swt好像也是用其他语言(c?)画图,然后通过java native interface调用来实现的。所以看上去Eclipse这个用java开发的东西和自己写的swing程序很不一样的原因。
      

  4.   

    我知道,linux下肯定能用的,就那么个小问题就不能用,swing未免也太脆弱了,有哪位大侠,帮忙看看,为何这个代码在winxp下可以用,在linux下却不行呢?