2013-08-23 205 views
0

我是java的新手,试图编写一个程序来访问excel文件中的数据。但在线程获取消息访问Excel文件时出现异常

异常“主要” java.lang.Error的:未解决的问题,编译: 不能使静态参考非静态字段

编码:

package xl; 

import java.io.File; 
import java.io.IOException; 
import java.util.Date; 
import jxl.*; 
import jxl.Workbook.*; 
import jxl.read.biff.BiffException; 

public class xl { 

    public String path = "C:/Workbook.xls"; 
    public File wb = new File(path); 

    public static void main(String[] args) throws IOException, BiffException { 
     Workbook work; 
     work = Workbook.getWorkbook(new java.io.File(wb)); 

     Sheet sheet1 = work.getSheet(0); 
     Cell c1 = sheet1.getCell(0,0); 

     String xreader = c1.getContents(); 
     System.out.println(xreader); 
    } 
} 

任何想法,我错了......

+0

变量'path'和'wb'不是静态的,它们是从静态方法('public static void main(String [] args)'')调用的。您需要使这些变量为静态或在静态方法中声明它们。 – dic19

回答

2

主要方法是静态方法。你的实例变量wb不能以静态方法访问。

这是因为在创建类的对象之前实例变量不存在,但可以始终在不创建对象的情况下访问静态方法。

要解决,同时声明实例变量为静态:

private static String path = "C:/Workbook.xls"; 
private static File wb = new File(path); 

虽然,这不是一个好的设计。但它至少会使它编译。

+0

谢谢。 :) 它现在工作。 – Knb

+0

很高兴知道这一点。祝你好运。 – KKKCoder

1
public class xl 
{ 
    public static void main(String[] args) throws IOException, BiffException { 
      String path = "C:/Workbook.xls"; 
      File wb = new File(path); 
      Workbook work; 
      work = Workbook.getWorkbook(new java.io.File(wb)); 

      Sheet sheet1 = work.getSheet(0); 

      Cell c1 = sheet1.getCell(0,0); 

      String xreader = c1.getContents(); 
      System.out.println(xreader); 
    } 

}

+0

它工作得很好。谢谢@Prabhakaran。 – Knb

+0

好...... @Knb – Prabhakaran

0

主要方法必须是静态方法,但它不能引用任何实例变量,因为它们不是静态的。通过将实例变量声明为静态变量,可以将实例变量更改为类变量,但这不是一种好的做法,因为在这种情况下,变量对应于工作簿的特定实例。

更好的解决方案是创建一个加载工作簿并打印出内容的实例方法。当前主要方法的所有代码都应该用于这种新方法。

然后在主要方法中,您只需创建您的类的实例,然后调用新的方法。

public void printWorkbook() throws IOException, BiffException { 
    Workbook work; 
    work = Workbook.getWorkbook(new java.io.File(wb)); 

    Sheet sheet1 = work.getSheet(0); 
    Cell c1 = sheet1.getCell(0,0); 
    String xreader = c1.getContents(); 
    System.out.println(xreader);  
} 

public static void main(String[] args) throws IOException, BiffException { 
    xl instance = new xl(); 
    instance.printWorkBook(); 
} 

更妙的是让printWorkbook接受路径的字符串参数,然后从主方法通过这个英寸然后,您将创建File对象wb作为此方法的局部变量。然后,您可以通过从命令行读取作为参数的路径,轻松地概括您的主要方法以打印出任何文件。

通常给予以大写字母开头的类名并定义类的用途。所以,而不是xl你可以打电话给你的班级WorkbookPrinter

相关问题