Как решить 'Исключение в потоке "main" java.lang.NoClassDefFoundError: org / apache / poi / ss / usermodel / Row' - PullRequest
0 голосов
/ 18 декабря 2018

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что я хочу импортировать файл Excel и передать его другому классу, например так:

package cal;

import java.util.Scanner;

public class CalendarMain {
public static void main(String[] args) {

    Scanner link = new Scanner(System.in);
    System.out.println("Please insert the raw file link: ");
    String excellink = link.nextLine();
    link.close();

    String[] excelLink = new String[] { excellink };
    ShiftSetting.main(excelLink);
   }
}

Не было проблем при компиляции и запуске через командную строку, но когдавставьте ссылку на необработанный файл в командную строку и нажмите Enter, она выдаст мне эту ошибку:

C:\Users\User\eclipse-workspace\Calendar_v1\src>java cal.CalendarMain cal.ShiftSetting cal.PHNames
    Please insert the raw file link:
    C:\Users\User\Desktop\WORK\2019raw.xlsx
    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Row
            at cal.CalendarMain.main(CalendarMain.java:16)
    Caused by: java.lang.ClassNotFoundException: org.apache.poi.ss.usermodel.Row
            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)
            ... 1 more

К вашему сведению, эта проблема никогда не возникает, когда я запускаю ее в Eclipse.Но когда я пытаюсь запустить в командной строке, это дает мне эту ошибку.Строка 16 на самом деле это строка: ShiftSetting.main(excelLink);

Я также предоставляю файл ShiftSetting.java

package cal;

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ShiftSetting {
    public static void main(String[] excelLink) {
        ArrayList<String> shiftname = new ArrayList<String>();
        ArrayList<String> shiftcode = new ArrayList<String>();
        try {
            FileInputStream file = new FileInputStream(new File("C:\\Users\\User\\Desktop\\WORK\\shiftnameall.xlsx"));
            XSSFWorkbook wb = new XSSFWorkbook(file);
            XSSFSheet sheet = wb.getSheetAt(0);
            DataFormatter formatter = new DataFormatter();
            String cellValue = null;
            for (int rowNum = 0; rowNum < sheet.getLastRowNum() + 1; rowNum++) {
                Row r = sheet.getRow(rowNum);
                String val = null;
                for (int m = 0; m < r.getLastCellNum(); m = m + 2) {
                    Cell cell = r.getCell(m);
                    val = formatter.formatCellValue(cell);
                    shiftname.add(val);
                }
            }
            for (int rowNum = 0; rowNum < sheet.getLastRowNum() + 1; rowNum++) {
                Row r = sheet.getRow(rowNum);

                String val = null;
                for (int m = 1; m < r.getLastCellNum(); m++) {
                    Cell cell = r.getCell(m);
                    val = formatter.formatCellValue(cell);
                    shiftcode.add(val);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        /* PHDatesArray.main(excelLink, shiftname, shiftcode); */
    }
}

У кого-нибудь есть идеи, как решить эту проблему?

1 Ответ

0 голосов
/ 27 декабря 2018

Я решил эту проблему.На самом деле это не связано с версией APACHE POI или PATH внутри моей системной переменной.это просто мой путь в командной строке, который я пишу неправильно.

Я поместил все свои файлы .jar в папку, которая находится в одном пакете.

Поэтому я запускаю командучтобы скомпилировать вот так:

javac -cp jars/*;. *.java

затем, чтобы запустить его, я пишу так

java -cp calendar/jars/*; calendar.nameofclass1, calendar.nameofclass2

...