当前位置: 首页 > 知识库问答 >
问题:

java.lang.NoSuchFieldError:默认

刘承运
2023-03-14

我目前正在使用vscode和apachepoi,创建了一个程序来自动创建<code>。xlsx编程并让A1单元输入一个名为“Tester”的字符串,然后弹出错误。

我程序中的代码:

package excel_reader;

import java.io.FileOutputStream;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelWriter {
    public static void main (String[] args) throws Exception {
        //ExcelReader eR = new ExcelReader();
        XSSFWorkbook workbook = new XSSFWorkbook();  // here is the7 line 13
        // first sheet create
        XSSFSheet sheet = workbook.createSheet("FirstExcelSheet");
        // first row create - A
        XSSFRow row = sheet.createRow(0);
        // first cell create - 1
        XSSFCell cell = row.createCell(0); // A-1
        // give data into A-1 cell
        cell.setCellValue("Tester");

        // Output as an excel file
        workbook.write(new FileOutputStream("C:\\Users\\Sonic\\Desktop\\book.xlsx"));
        workbook.close();

        // C:\\Users\\Sonic\\Desktop\\book.xlsx
    }
}

错误代码:

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Try the new cross-platform PowerShell aka.ms/pscore6

PS E:\excel_reader_v.1_beta1-0> cd 'e:\excel_reader_v.1_beta1-0'; & 'C:\Users\Sonic\.vscode\extensions\vscjava.vscode-java-debug-0.24.0\scripts\launcher.bat' 'C:\Users\Sonic\AppData\Local\Programs\AdoptOpenJDK\bin\java' '-Dfile.encoding=UTF-8' '-cp' 'C:\Users\Sonic\AppData\Local\Temp\cp_5wuvlu562pjj6rfd2pconxvl4.jar' 'excel_reader.ExcelWriter' 
Exception in thread "main" java.lang.NoSuchFieldError: DEFAULT
        at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:161)
        at excel_reader.ExcelWriter.main(ExcelWriter.java:13)

嗯.xml(依赖):

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.1</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.11</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.1</version>
</dependency>

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-math3</artifactId>
    <version>3.6.1</version>
</dependency>

<dependency>
    <groupId>org.apache.xmlbeans</groupId>
    <artifactId>xmlbeans</artifactId>
    <version>3.1.0</version>
</dependency>

Apache POI对我来说是新的,请帮助我,我会非常感激,非常感谢。

共有3个答案

谢叶五
2023-03-14

pom.xml中唯一需要的apache-poi依赖项是

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.0</version>
</dependency>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.0</version>
</dependency>

请删除其他。

当我删除其他代码时,我的代码工作正常。

壤驷志学
2023-03-14

因为在评论中加入这一点是不可行的。你能尝试删除pom中的这部分代码吗。xml并重试?

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.11</version>
</dependency>

基于粗略阅读。它已在下面的代码中定义

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.1</version>
</dependency>
湛宏旷
2023-03-14

如果您在StackOverflow中搜索标签nosuchfield dnor,您会发现很多类似的问题。他们中的大多数都有2个共同点:

  • 错误表明找不到CONSTANT字段
  • 原因是相关的2个或更多依赖项(即第三方JAR文件)具有不同的版本

此版本不匹配也可能导致错误:

java.lang.NoSuchFieldError:默认

因为类<code>org.apache.poi.ss.formula.udf的常量<code>DEFAULT</code>。UDFFinder</code>存在于3.17之前的版本中,但现在(4.0及更高版本)已被弃用。这意味着,它在4.0及更高版本中不存在。

运行时的问题:如果语句new XSSFWorkbook();(在第13行)使用依赖项(JAR)poi-ooxml执行,则它使用核心依赖项(JAR)poiUDFFinder,因此尝试查找CONSTANT字段DEFAULT(可能不存在,因为版本不匹配)。

所以我想,您的Apachepoipoi-ooxml版本不匹配(不是同一级别)。请参阅使用Apache Poi的版本不匹配的类似问题。

如果您正在使用Maven,请确保您的POM上有这些依赖项:

    <dependencies>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.0</version>
        </dependency>
    </dependencies>

至少两个都要是同一个版本!

如果您手动管理类路径和JAR,请注意所有apachepoiJAR文件的文件名,并确保版本相同。

如果您只想将新创建的Excel-Workbook写入文件,例如/tmp/MyFirstExcel.xlsx(在Linux)或C:/User/Sonic/MyFirstExcel.xlsx(在Windows上,假设您的Windows-User是Sonic),然后使用以下代码:

public class ExcelWriter {
    static final String FILE_PATH_LINUX = "/tmp/MyFirstExcel.xlsx";
    static final String FILE_PATH_WIN = "C:/Users/Sonic/MyFirstExcel.xlsx"; // note: replace Window's backslash '\' by either double-backslash '\\' or single forward-slash '/'

    public static void main(String[] args) throws FileNotFoundException, IOException {
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("FirstExcelSheet"); // first sheet create
        XSSFRow row = sheet.createRow(0); // first row create - A
        XSSFCell cell = row.createCell(0); // first cell create - A-1        
        cell.setCellValue("Tester"); // give data into A-1 cell

        // Output as an excel file
        workbook.write(new FileOutputStream(FILE_PATH_WIN));
        workbook.close();
    }
}

ExcelReader的用法不明确:没有明显的理由从ExcelReader扩展。因此,为了简单起见,您可以省略扩展ExcelReader,声明ExcelReadereR=newExcelReadr()和用法eR。getImpoFileLink()获取文件路径。否则,请将类<code>ExcelReader</code>的源代码发布到您的问题中,使其成为最小的可复制示例。

最小工作解决方案(上图)解释:相反,只需将文件路径放入所需的文件夹和文件,就像此处的常量FILE_PATH_WIN一样。几个小时前,我看到了你的相关问题,你在哪里这样做的。

假设您在此处修复了其他问题,并且在此处解决了与POI依赖项的版本不匹配问题,那么上面给出的解决方案应该可以编译并写出所需的Excel工作簿(。xlsx)与工作表< code>FirstExcelSheet和单元格< code>A1包含字符串< code>Tester。

请参阅本教程 关于 Apache POI – 在 Java 中读取和写入 Excel 文件。

 类似资料:
  • 嗨,又是我,我现在在启动我的应用程序时出现了这个错误: 我找不到原因,我确切地说这是一个带有模块的maven项目,所以我将所有依赖项放在父模块pom文件中: 这是我的应用程序类: 我觉得问题出在pom,但是找不到在哪里。

  • 我有一个MavenJava项目,它使用HttpClient来执行HTTP请求。在我的本地JavaWeb Server上,一切正常。但是在我将其部署到SAP Hana云平台后,我收到以下错误: 我的依赖是这样的: 根据这个问题,java.lang.NoSuchFieldError:org.apache.http.message.basicInfo。在Java应用程序中的Mashape Unirest

  • 我已经在我的Android项目中集成了一个第三方库。该库以. aar文件的形式提供。 它的实现是一个简单的单行程序,它在我的MainActivity中创建了一个customdialog。 但每当它试图创建对话框时,我的应用程序就会崩溃 我在一个新的空android项目中实现了这个库,它按计划工作。所以看起来和我的项目有冲突。 我在另一篇博文(这里)中读到,当project和library意外地将相

  • 我得到了这个错误: 线程“main”Java.lang.NosuchFielderRror:calificacion.main处的num1异常(problema_3.Java:17) 在这个简单的终端Java程序上键入第一个值后: 另一方面,这一个运行良好,我使用相同的输入法在这两个: 提前道谢。

  • 我试图通过jmeter在jenkins上运行一些junit测试,以进行一些GAE成本测试。至少可以说,这确实是一个令人头疼的问题。就目前所发生的事情而言,我一直努力争取得到这个问题,我希望这将是最后一次。一些要点: null

  • 我使用Apache中的HttpClient组件来执行以下简单的程序,并看到以下异常: 我正在使用 httpclient-4.3.3.jar httpcore-4.3.2.jar 有什么想法吗?