2016-07-18 52 views
0

我使用Apache POI讀取excel文件(xls和xlsx格式)。 它在IDE(我使用IntelliJ)中運行良好,但是當我將該項目設置爲JAR時,它無法讀取該excel文件。我嘗試通過給予excel文件的完整路徑,但不工作。 文件名拼寫正確,文件不受保護或只讀格式。一切都很好,直到我運行JAR。當轉換爲JAR時,無法讀取javafx中的excel文件

java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(Unknown Source) 
    at com.sun.javafx.application.LauncherImpl.launchApplication(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source) 
Caused by: java.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFWorkbook 
    at TakeInput.Take(TakeInput.java:25) 
    at MainGUI.main(MainGUI.java:53) 
    ... 11 more 
Caused by: java.lang.ClassNotFoundException: org.apache.poi.hssf.usermodel.HSSFWorkbook 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 13 more 
Exception running application MainGUI 

這裏是我的TakeInput類:

import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 


import java.io.*; 
import java.util.Arrays; 
import java.util.Comparator; 
import java.util.StringTokenizer; 

public class TakeInput { 

public void Take() throws Exception{ 
    System.out.println("Inside TakeInput class.."); 

    File f = new File("courses.xls"); 
    FileInputStream fs = new FileInputStream(f); 
    HSSFWorkbook wb = new HSSFWorkbook(fs); 
    HSSFSheet sheet = wb.getSheetAt(0); 


    int CSECourseCounter=0; 

    for(int i=0;i<=sheet.getLastRowNum();i++){ 
     String tempCode = sheet.getRow(i).getCell(0).getStringCellValue(); 
     StringTokenizer tok = new StringTokenizer(tempCode); 

     String codeTok=tok.nextToken(); 

     if(codeTok.equals("CSE") || codeTok.equals("CSI")) { 
      CSECourseCounter++; 
     } 

    } 

    CourseInfo[] courses = new CourseInfo[CSECourseCounter]; 
    for(int i=0;i<CSECourseCounter;i++) 
     courses[i]=new CourseInfo(); 

    System.out.println(sheet.getLastRowNum()); 


    for(int i=0,j=0;i<=sheet.getLastRowNum();i++){ 
     String tempCode = sheet.getRow(i).getCell(0).getStringCellValue(); 
     StringTokenizer tok = new StringTokenizer(tempCode); 

     String codeTok=tok.nextToken(); 

     if(codeTok.equals("CSE") || codeTok.equals("CSI")) { 
      courses[j].code = sheet.getRow(i).getCell(0).getStringCellValue(); 
      courses[j].title = sheet.getRow(i).getCell(1).getStringCellValue(); 
      courses[j].section = sheet.getRow(i).getCell(2).getStringCellValue(); 
      courses[j].day = sheet.getRow(i).getCell(4).getStringCellValue(); 
      courses[j].time = sheet.getRow(i).getCell(5).getStringCellValue(); 
      //courses[i].room = sheet.getRow(i).getCell(6).getNumericCellValue(); 
      //System.out.println(courses[j].code); 
      j++; 
      //CSECourseCounter++; 
     } 
    } 

    Arrays.sort(courses, new Comparator<CourseInfo>() { 
     @Override 
     public int compare(CourseInfo o1, CourseInfo o2) { 
      return o1.title.compareTo(o2.title); 
     } 
    }); 

    System.out.println("CSE courses = "+CSECourseCounter); 

    for(int i=0;i<CSECourseCounter;i++){ 
     courses[i].setCampus(); 
     courses[i].setLabCLassAndTimeSlot(); 
     courses[i].setDay(); 
    } 



    //***************************** CourseInfo to a linked list ****************** 

    for(int i=0;i<courses.length;i++){ 

     CourseToLinkedList temp = AddSearchCourse.searchCourse(courses[i].code); 

     if(temp==null) { 
      AddSearchCourse.addCourse(courses[i].title,courses[i].code,courses[i].islabClass); 
      CourseToLinkedList temp1 = AddSearchCourse.searchCourse(courses[i].code); 
      temp1.addSections(courses[i].code,courses[i].title,courses[i].section,courses[i].day,courses[i].time, 
        courses[i].timeStart,courses[i].timeEnd,courses[i].room, 
        courses[i].faculty,courses[i].credit,courses[i].assigned, 
        courses[i].campus,courses[i].dept,courses[i].islabClass, 
        courses[i].timeSlot,courses[i].labTimeSlot,courses[i].day1,courses[i].day2 
      ); 
     } 
     else{ 
      CourseToLinkedList temp1 = AddSearchCourse.searchCourse(courses[i].code); 
      temp1.addSections(courses[i].code,courses[i].title,courses[i].section,courses[i].day,courses[i].time, 
        courses[i].timeStart,courses[i].timeEnd,courses[i].room, 
        courses[i].faculty,courses[i].credit,courses[i].assigned, 
        courses[i].campus,courses[i].dept,courses[i].islabClass, 
        courses[i].timeSlot,courses[i].labTimeSlot,courses[i].day1,courses[i].day2 
      ); 
     } 
    } 

    System.out.println("outside try catch.."); 
} 
} 

我把這個Excel文件是在項目文件夾到文件夾中的JAR文件位於的副本。位置沒有問題。

+0

可能重複[如何解決此Java類未找到異常?](http://stackoverflow.com/questions/17408769/how-do-i-resolve-this-java-class-not-found-例外) – fabian

回答

0

正如我可以看到的日誌,這個問題可能發生,因爲你的代碼的依賴瓶。嘗試將類'HSSFWorkbook'添加到您的類路徑中,然後嘗試再次運行它(可能是'jakarta-poi-version.jar')。

+0

我添加了所有外部JAR的Apache POI 3.14 我是否應該再次添加jakarta-poi-version.jar? –

+0

不,只是嘗試將該jar添加到您的java類路徑變量中,並查看它正在工作的天氣r因爲根據錯誤,您的代碼似乎找不到所需的類。 –

相關問題