Java JTable,数据,非静态方法

Java JTable,数据,非静态方法,java,jtable,Java,Jtable,有什么问题吗?无法从静态上下文引用非静态变量数据。我想从.dat文件加载数据,但我不知道如何才能这样做?我试过了,但由于前面的错误消息,它不起作用。谢谢你的帮助 public class StudentFrame extends JFrame { private StudentData data; private static String[] columnNames = {"A","B","C","D"}; private void initComponen

有什么问题吗?无法从静态上下文引用非静态变量数据。我想从.dat文件加载数据,但我不知道如何才能这样做?我试过了,但由于前面的错误消息,它不起作用。谢谢你的帮助

  public class StudentFrame extends JFrame {
    private StudentData data;
    private static String[] columnNames = {"A","B","C","D"};
        private void initComponents() {
            this.setLayout(new BorderLayout());

        }
        @SuppressWarnings("unchecked")
        public StudentFrame() {
            super("Hallgatói nyilvántartás");
            setDefaultCloseOperation(EXIT_ON_CLOSE);

            try {
                data = new StudentData();
                ObjectInputStream ois = new ObjectInputStream(new FileInputStream("students.dat"));
                data.students = (List<Student>)ois.readObject();
                ois.close();
            } catch(Exception ex) {
                ex.printStackTrace();
            }
            addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    try {
                        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("students.dat"));
                        oos.writeObject(data.students);
                        oos.close();
                    } catch(Exception ex) {
                        ex.printStackTrace();
                    }
                }
            });
            setMinimumSize(new Dimension(500, 200));
            initComponents();
        }
        public static void main(String[] args) {
            StudentFrame sf = new StudentFrame();
            sf.setVisible(true);


            sf.setLayout(new BorderLayout());


            JTable table = new JTable(data,columnNames);//PROBLEM

            table.setFillsViewportHeight(true);
           /*Jscroll...*/

            scrollPane.setViewportView(table);
            sf.add(table.getTableHeader(), BorderLayout.PAGE_START);
            sf.add(table, BorderLayout.CENTER);
            sf.add(scrollPane, BorderLayout.LINE_END);
            sf.setVisible(true);

        }
    }
公共类StudentFrame扩展了JFrame{
私人学生数据;
私有静态字符串[]columnNames={“A”、“B”、“C”、“D”};
私有组件(){
此.setLayout(新的BorderLayout());
}
@抑制警告(“未选中”)
公共学生框架(){
超级(“Hallgatói nyilvántartás”);
setDefaultCloseOperation(关闭时退出);
试一试{
数据=新学生数据();
ObjectInputStream ois=新ObjectInputStream(新文件InputStream(“students.dat”));
data.students=(List)ois.readObject();
ois.close();
}捕获(例外情况除外){
例如printStackTrace();
}
addWindowListener(新的WindowAdapter(){
@凌驾
公共无效窗口关闭(WindowEvent e){
试一试{
ObjectOutputStream oos=新的ObjectOutputStream(新文件OutputStream(“students.dat”);
oos.writeObject(data.students);
oos.close();
}捕获(例外情况除外){
例如printStackTrace();
}
}
});
设置最小尺寸(新尺寸(500200));
初始化组件();
}
公共静态void main(字符串[]args){
StudentFrame sf=新StudentFrame();
sf.setVisible(真);
sf.setLayout(新的BorderLayout());
JTable table=新的JTable(数据、列名);//问题
表.setFillsViewPerthweight(真);
/*杰克罗尔*/
scrollPane.setViewportView(表);
添加(table.getTableHeader(),BorderLayout.PAGE_START);
sf.add(表格、边框布局、中心);
添加(滚动窗格,边框布局,线条结束);
sf.setVisible(真);
}
}

建议重新构造代码,并将主方法的内容移动到StudentFrame类中。没有真正的理由使用静态变量,让TableData成为StudentFrame的成员变量。仅从main方法实例化StudentFrame,设置框架并显示它。内容的显示方式应该是StudentFrame类的一部分


columnNames可以作为一个静态变量,因为它是一个常量。

您的StudentFrame私有成员变量需要公共访问器,然后您可以在main中将它们引用为
JTable table=new JTable(sf.getData(),StudentFrame.getColumnNames())

Try:私有静态学生数据;代替:私人学生数据;请格式化您的问题,明确您在哪一行遇到的编译器错误。还要检查——更好的问题往往会得到更好的答案。