我对java (以前一直在c#上)还不太熟悉,需要创建一个swing应用程序,在这里我需要从xls文件中读取数据。所以我使用jXL。
我有一个类,它从excel文件中返回第一个工作表的名称,在jFileChooser中选择。以下是代码:
import java.io.File;
import jxl.Sheet;
import jxl.Workbook;
public class ExcelObject
{
private String filename = null;
private Workbook wb = null;
private Sheet sheet = null;
public ExcelObject(String f)
{
filename = f;
}
public String getSheetName()
{
String sheet_name = null;
try
{
wb = Workbook.getWorkbook(new File(filename));
sheet = wb.getSheet(0);
sheet_name = sheet.getName();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
wb.close();
}
return sheet_name;
}
} 程序调用中的内容如下:
ExcelObject ex = new ExcelObject(filename);
String s = ex.getSheetName();
lblReport.setText(s);所以问题是:当在eclipse (3.4.2)中运行时,我得到了一个正确的值,当编译jar时,不返回!我的意思是lblReport是空的,没有任何例外和警告。
记住:所有其他外部罐子都能正常工作。
我试了很多东西,但都没有用。
还有,如果我做了这样的事
ExcelObject ex = new ExcelObject(filename);
String s = ex.getSheetName();
// lblReportRun.setText(s);
lblReportRun.setText("Test");
lblAnyOtherLabel.setText("Test");无论是在标签中,还是在编译的jar中,在eclipse中都没有显示文本。
发布于 2011-10-18 14:57:47
这可能是因为如果打开工作簿时出现了某些异常,则需要捕获它,打印堆栈跟踪,然后在“最后”块中关闭工作簿。但是,由于在调用Workbook.getWorkbook时出现了异常,所以wb变量仍然为null,因此您正在尝试在其上调用close。因此,在最后一个块中发生一个NullPointerException。
注意你的控制台,你一定有一些异常弹出。
另外,请注意,fileName应该是类的唯一实例变量,Java变量通常不包含下划线并使用camelCase,而fileName变量应该是文件类型,而不是字符串:从文件选择器获得文件,将其转换为字符串,然后将其转换回文件。
另一种可能是,因为它在Eclipse中工作,而不是在外部运行时,您忘了将jXL jar放在类路径中,这会导致在尝试使用ExcelObject类时出现一些ClassNotFoundException。
https://stackoverflow.com/questions/7809180
复制相似问题