2011-10-18 2 views
0

저는 Java에 거의 익숙하지 않습니다 (항상 C#에 있었음) xls 파일에서 데이터를 읽을 필요가있는 스윙 응용 프로그램을 만들어야합니다. 그래서 나는 jXL을 사용한다.JXL 라이브러리 호출

jFileChooser에서 선택한 Excel 파일의 첫 번째 시트 이름을 반환하는 클래스가 있습니다. 그래서 문제가

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

:

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; 
    } 

} 

프로그램 호출처럼 보이는 : 여기 코드는 이클립스 (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

통합 문서를 여는 동안 예외가 발생하면 catch를 추적하고 스택 추적을 인쇄 한 다음 finally 블록에서 통합 문서를 닫는 것이 원인 일 수 있습니다. 그러나 Workbook.getWorkbook을 호출 할 때 예외가 발생했기 때문에 wb 변수는 여전히 null이며 사용자는 close을 호출하려고합니다. 따라서 NullPointerException은 finally 블록에있는 동안 발생합니다.

콘솔을 보면서 예외가 발생해야합니다.

또한 파일 이름은 클래스의 유일한 인스턴스 변수 여야하며 Java 변수에는 일반적으로 밑줄이없고 camelCase를 사용하고 fileName 변수는 String이 아닌 File 유형이어야합니다. 파일 선택기에서 파일을 문자열로 변환 한 다음 다시 파일로 변환합니다.

Eclipse에서 작동하고 외부에서 실행되지 않기 때문에 클래스 경로에 jXL jar를 넣는 것을 잊어 버렸기 때문에 ExcelObject 클래스를 사용하려고 할 때 ClassNotFoundException이 발생합니다.

+0

아니오, 아니오, 아니오, 다시 : 이클립스에는 예외/경고 등이 없습니다! 항상 내가 선택한 올바른 파일에서 올바른 값을 얻습니다. 그러나 항아리가 컴파일 될 때, lables는 비어 있습니다. – user1001327

+0

수정 된 답변보기 첫 번째 설명이이 문제에 대한 좋은 설명이 아니더라도 나중에 문제가 발생할 수 있습니다. 코드를 수정하는 것이 좋습니다. –

+0

파일 옵션을 사용해 보겠습니다. 하지만 분명히 classpath paroblem이 아닙니다 (일식을 사용하면 항아리를 컴파일 할 수 없습니다!) – user1001327

관련 문제