【问题标题】:Reading excel file failing due to lock with null pointer exception由于空指针异常锁定导致读取 excel 文件失败
【发布时间】:2013-05-19 10:00:29
【问题描述】:

我是 Java 和编程的新手。我有一堆代码从 excel 中读取数据并将其用于运行一些测试用例(selenium webdriver)。 下面的代码显示了从 excel 中读取数据,在串行运行我的测试用例时效果很好(一个接一个)。

public String getData(String SheetName, String DataSet, String ColumnName) throws                JXLException,IOException {         
        Workbook workbook=null;            
        workbook = Workbook.getWorkbook(new File(".\\data\\TestData.xls"));
        Sheet sheet = workbook.getSheet(SheetName); 
        int iRow,iCol=0,iNumCol,p;
        String sData="";      
        Cell sTestData=sheet.findCell(DataSet);
        iNumCol=sheet.getColumns();
        iRow=sTestData.getRow();
        for (p=0;p<iNumCol;p++)
        {               
            String sCol=sheet.getCell(p,0).getContents();
            if (sCol.matches(ColumnName))
            {
                iCol=p;
                bColumnFound=true;
            }   

          }      
        sData = sheet.getCell(iCol,iRow).getContents();    
        return sData;  
    }

@Test(testName = "list_News")
@Parameters("format")
public void list_News(String format) throws Exception {

String sgetname = "", sPassword = "", sUrl = ""; 
sgetname = cm.getData("list_News", "list_News", "idname");  >>> THIS STEP I am getting NULL POINTER EXCEPTION
sPassword = cm.getData("list_News", "list_News", "Password");
sUrl = cm.getData("list_News", "list_News", "URL");

我的问题是 - 当我尝试同时运行多个案例时,我得到空指针异常,如下所示。 它在每种情况下都失败的地方在于读取 excel 文件的第一行。我怀疑这可能是在读取 excel 文件时引起的一些锁定。 我该如何解决这个问题……我需要实现多线程吗?我该怎么做?

java.lang.NullPointerException
在 common.commonMethods.getData(commonMethods.java:241)
在 api.case.list.Listnews.test_paperid_Pos_014(news_uth.java:282)
在 java.util.concurrent.FutureTask$Sync.innerRun(未知来源)
在 java.util.concurrent.FutureTask.run(未知来源)
在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源)
在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源)
在 java.lang.Thread.run(未知来源)

提前致谢 干杯

【问题讨论】:

  • 您在commonMethods.java:241 有一个NullPointerException。因为我们在您的示例中没有行号,您能否发布第 241 行是什么?
  • 第 241 行有这个代码 sgetname = pm.getData("list_news", "list_news_testcase1", "idname"); pm.getData 是我上面贴的阅读excel方法..
  • 您发布的方法getData 是发生异常的方法吗?我在您发布的代码示例中没有看到该行。需要查看完整代码以更好地了解NPE 之前发生的情况。
  • 我已经提到了上面的代码请寻找这一行。 >>> 这一步我在这一点上得到 NULL POINTER EXCEPTION

标签: java nullpointerexception


【解决方案1】:

我认为你忘记了测试你是否发现了价值。试试看:

public String getData(String SheetName, String DataSet, String ColumnName) throws JXLException, IOException {
    Workbook workbook = Workbook.getWorkbook(new File( ".\\data\\TestData.xls"));
    Sheet sheet = workbook.getSheet(SheetName);
    Cell sTestData = sheet.findCell(DataSet);
    int iNumCol = sheet.getColumns();
    int iRow = sTestData.getRow();
    boolean bColumnFound = false;
    int iCol;

    for (int p = 0; p < iNumCol; p++) {
        String sCol = sheet.getCell(p, 0).getContents();
        if (sCol.matches(ColumnName)) {
            iCol = p;
            bColumnFound = true;
        }

    }
    if (!bColumnFound) {
        return "";
    }
    return sheet.getCell(iCol, iRow).getContents();
}

不知道你用的是什么API,所以无法测试。

【讨论】:

  • 我正在使用jxl............ import jxl.Workbook;导入 jxl.Cell;导入 jxl.JXLException;导入 jxl.Sheet
  • 我还想告诉您,当我一个一个运行测试用例时,我能够成功读取 excel 文件。当我尝试同时运行测试用例时,我看到了这个 NPE。
  • 我认为库在读取文件时正在锁定文件。我不知道您的图书馆是如何运作的,所以我无法为您提供更多帮助。
猜你喜欢
  • 2016-08-27
  • 1970-01-01
  • 2015-12-11
  • 2014-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-02
相关资源
最近更新 更多