2011-10-18 30 views
0

我幾乎不熟悉java(始終在c#之前),需要創建一個swing應用程序,我需要從xls文件讀取數據。所以我使用jXL。JXL庫調用

我有一個類,它返回jFileChooser中選擇的excel文件中第一個工作表的名稱。下面是代碼:

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),我得到一個正確的值,當罐子跑編譯,沒有價值返回!我的意思是lblReport是空的,沒有例外和警告。

請記住:所有其他外部罐子都能正常工作。

我嘗試了很多東西,但都沒有工作。

另外,如果我這樣做

      ExcelObject ex = new ExcelObject(filename); 
          String s = ex.getSheetName(); 
//       lblReportRun.setText(s); 

          lblReportRun.setText("Test"); 
          lblAnyOtherLabel.setText("Test"); 

沒有文字顯示在標籤或者,在編譯罐子,並在日食罰款。

+0

與您的代碼相關的excel文件在哪裏?您是否使用完全限定的文件名? –

+0

是的,我通過JFileChooser得到它: – user1001327

+0

不能在這裏插入代碼... – user1001327

回答

0

這可能是因爲如果在打開工作簿時發生某種異常,則會捕獲它,打印堆棧跟蹤,然後關閉finally塊中的工作簿。但是,由於調用Workbook.getWorkbook時發生異常,因此wb變量仍然爲空,並且您試圖對其調用close。所以NullPointerException發生在finally塊中。

注意您的控制檯,您必須彈出一些例外。

另外,請注意,fileName應該是您的類的唯一實例變量,即Java變量通常不包含下劃線並使用camelCase,並且fileName變量應該是File類型而不是String:來自文件選擇器的文件,將其轉換爲字符串,然後將其轉換回文件。

另一種可能性,因爲它在Eclipse中工作,而不是在外部運行時,因爲您忘記將jXL jar放入類路徑中,當嘗試使用ExcelObject類時會導致一些ClassNotFoundException。

+0

不,不,再次:在日食中沒有例外/警告等等!總是我從我選擇的任何excel文件中獲得正確的值。但是,當編譯jar時,標籤是空的。 – user1001327

+0

看到我編輯的答案。即使第一種解釋不適合這個問題,它可能會在稍後導致問題。你最好修改代碼。 –

+0

讓我試試文件選項。但它顯然不是classpath paroblem(日食不會讓你編譯jar!) – user1001327