Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JXL库调用_Java_Jxl - Fatal编程技术网

Java JXL库调用

Java JXL库调用,java,jxl,Java,Jxl,我对java并不陌生(以前一直使用c语言),需要创建一个swing应用程序,从xls文件中读取数据。所以我使用jXL 我有一个类,它返回excel文件中第一张工作表的名称,即jFileChooser中的choosen。代码如下: import java.io.File; import jxl.Sheet; import jxl.Workbook; public class ExcelObject { private String filename = null; private

我对java并不陌生(以前一直使用c语言),需要创建一个swing应用程序,从xls文件中读取数据。所以我使用jXL

我有一个类,它返回excel文件中第一张工作表的名称,即jFileChooser中的choosen。代码如下:

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中也没有显示文本。

这可能是因为如果在打开工作簿时出现异常,您将捕获它,打印堆栈跟踪,然后在finally块中关闭工作簿。但是,由于调用
Workbook.getWorkbook
时发生异常,
wb
变量仍然为空,您正试图对其调用
close
。因此,在finally块中发生
NullPointerException

注意你的控制台,你一定会出现一些异常

另外,请注意,fileName应该是类的唯一实例变量,Java变量通常不包含下划线和用例,并且fileName变量应该是File类型,而不是String:从文件选择器获取文件,将其转换为字符串,然后将其转换回文件


另一种可能性是,由于它在Eclipse中工作,而不是在外部运行时,您忘记将jXL jar放在类路径中,这会在尝试使用ExcelObject类时导致一些ClassNotFoundException。

与代码相关的excel文件在哪里?您使用的是完全限定的文件名吗?是的,我通过JFileChooser获取:无法在此处插入代码…JFileChooser chooser=new JFileChooser();选择器.setAcceptableFileFilterUsed(false);setFileFilter(新的xlsFilter());int state=chooser.showOpenDialog(null);File File=chooser.getSelectedFile();如果(file!=null&&state==JFileChooser.APPROVE_选项){String filename=file.getAbsolutePath();txtFilePath.setText(文件名);ExcelObject ex=new ExcelObject(文件名);String s=ex.getSheetName();很抱歉使用这种难看的格式…不,不,不,再次:在eclipse中没有异常/警告等!我总是从我选择的任何excel文件中获得正确的值。但是,当编译jar时,标签是空的。请参阅我编辑的答案。即使第一个解释对这个问题不是很好的解释,以后也可能会导致问题。你最好修复这个问题让我试试File选项,但这显然不是类路径问题(eclipse不会让您编译jar!)你说你没有从Eclipse运行应用程序。Eclipse编译的jar包含你的类,而不是jXL中的类。当你运行应用程序时,你需要在类路径中包含你的jar和jXL jar。你能告诉我具体是怎么做的吗???是standart jar编译还是其他什么?