温馨提示:本文翻译自stackoverflow.com,查看原文请点击:java - NoClassDefFoundError sun/io/ByteToCharConverter with InterBase JDBC driver
java java-8 jdbc interbase

java - 带有InterBase JDBC驱动程序的NoClassDefFoundError sun / io / ByteToCharConverter

发布于 2020-04-11 14:25:41

使用InterClient 7.5.1和8.1.5,在Java 8中创建新的JDBC连接失败,并显示以下内容:

java.lang.NoClassDefFoundError: sun/io/ByteToCharConverter

此类似乎由InterClient JDBC库引用或使用。使用Java 7不会发生该错误。是否有解决此错误的方法?


这段代码在Java 8上重现了该问题:

package com.example.so25365952;

import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Main {
    interbase.interclient.Connection conn; 

    public static void main(String[] args) {
        try {
            Class.forName("interbase.interclient.Driver");           
            DriverManager.getConnection("jdbc:interbase://localhost/data/mydb.gdb", "sysdba", "password123");           
        } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

输出:

线程“主”中的异常java.lang.NoClassDefFoundError:interbase.interclient.Connection.connect(未知源)处的interbase.interclient.Connection.connect(未知源)处的interbase.interclient.Driver.connect(未知处)的sun / io / ByteToCharConverter源)位于com.example.so25365952.Main.main(Main.java:14)处的java.sql.DriverManager.getConnection(DriverManager.java:247)处的java.sql.DriverManager.getConnection(DriverManager.java:664)创建者:java.lang.ClassNotFoundException:java.net.URLClassLoader $ 1.run(URLClassLoader.java:372)上的sun.io.ByteToCharConverter,java.net.URLClassLoader $ 1.run(URLClassLoader.java:361)上的sun.io.ByteToCharConverter。 java.net.URLClassLoader.findClass(URLClassLoader.java:360)上的AccessController.doPrivileged(本机方法),java.lang.ClassLoader.loadClass(ClassLoader.java:424)在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:308)在java.lang.ClassLoader.loadClass(ClassLoader.java:357)... 6另外

查看更多

提问者
mjn
被浏览
65
1,031 2019-04-25 13:01

sun。*和sunw。*软件包是内部的,基于这个原因,不应使用它们。似乎是InterClient的某个人搞砸了。我建议您通过错误报告与他们联系,以便他们知道可以在以后的版本中修复此问题。

如果您迫不及待想发布将来的版本,并且愿意破坏某些许可证(我当然不建议这样做)。通过从此处复制代码,然后使用将代码添加到引导类路径中-Xbootclasspath您也许可以创建自己的sun.io.ByteToCharConverter ,但这是最后的选择。