【问题标题】:non static variable list cannot be referenced from a static context不能从静态上下文中引用非静态变量列表
【发布时间】:2013-05-09 08:55:38
【问题描述】:

我想将数据库中的数据显示到 JList 中。但是它给出的错误是

non static variable list cannot be referenced from a static context" 
     at line "list.setModel(listModel)". 

我该怎么办?

Connection con=DriverManager.getConnection("jdbc:odbc:Records");
Statement st=con.createStatement();
DefaultListModel listModel=new DefaultListModel();
ResultSet rs=st.executeQuery("Select * from User_table1");
    while(rs.next()) {
      String name=rs.getString("Filename");
      listModel.addElement(name);
      System.out.println(name);
   }
list.setModel(listModel);
rs.close();
st.close();

【问题讨论】:

  • 这些类型的编译错误是你应该在命令行应用程序中解决的问题。!
  • @Siddique Ansari 删除除主类之外的所有静态 :-)
  • @AndrewThompson 确实 :) 这就是我删除它的原因。谢谢。
  • 并发布 SSCCE,简短、可运行、可编译,以获得真正的帮助(如果需要)

标签: java swing compiler-errors jlist defaultlistmodel


【解决方案1】:

你有两种方法可以解决这个问题:

  1. 将此函数设为非静态函数
  2. 将对象列表设为静态

所以如果你需要在静态上下文中调用这个函数,你应该使用第二种方式。 如果您需要这样来保护此类类型的任何对象的 list 值,那么您应该使用第一种方式。

我赞同@Andrew Thompson 在第一句话中所说的话。

【讨论】:

  • 如何使对象列表静态化?
  • 我认为如果你搜索一下会更好。你是如何将函数设为静态的?
【解决方案2】:

想象你有一个蓝图。然后,您根据该蓝图生产——例如——一部手机。稍后你拿起剪刀,剪下显示 SD 卡的蓝图的一部分,然后尝试将那张卡插入手机。

这行不通。

这就是为什么您不能从static 方法中引用非static 成员的原因。因为我写的是真的,反之亦然。

我建议您阅读一些有关面向对象设计的内容。例如,this 这本书是一本关于 java 的优秀书籍。如果你仔细阅读它,你就会明白问题的根源。

顺便说一句,您的编译器会告诉您问题出在哪里,以及您实际上不需要 SO 来获得答案的地方,只需阅读控制台即可。

正如其他人在 java 是一种面向对象的语言之前所说的那样,我们鼓励您使用它们,因此应谨慎使用 static 成员。

【讨论】:

    猜你喜欢
    • 2019-03-17
    • 2011-11-30
    • 1970-01-01
    相关资源
    最近更新 更多