【问题标题】:A JNI error has occurred, please check your installation and try again in Eclipse x86 Windows 8.1发生 JNI 错误,请检查您的安装并在 Eclipse x86 Windows 8.1 中重试
【发布时间】:2014-04-18 08:08:58
【问题描述】:
    public class LoginCumReg implements ActionListener,KeyListener {
        private JFrame form;
        private JTextField txtunm;
        private JTextField txtnm;
        private JTextField txteml;
        private JButton cmdcreate;
        private JPasswordField txtpass;
        private JPasswordField txtpassreg;
        private JButton cmdok;
        private JLabel lblunm;
        private JLabel lblpass;
        private JLabel lbleml;
        private JLabel lblpassreg;
        private JLabel lblnm;
        private JPanel panel_1;
    public LoginCumReg() {
        // construct components
        form = new JFrame("Sign Up");
        form.getContentPane().setFont(
                new Font("Plantagenet Cherokee", Font.BOLD, 18));
        txtunm = new JTextField(5);
        txtunm.addKeyListener(this);
        txtunm.setBounds(637, 55, 100, 25);
        txtnm = new JTextField(5);
        txtnm.setBounds(637, 228, 100, 25);
        txteml = new JTextField(5);
        txteml.setBounds(637, 264, 100, 25);
        cmdcreate = new JButton("Create Account");
        cmdcreate.setBounds(527, 350, 188, 25);
        txtpass = new JPasswordField(5);
        txtpass.setBounds(637, 91, 100, 25);
        txtpassreg = new JPasswordField(5);
        txtpassreg.setBounds(637, 300, 100, 25);
        cmdok = new JButton("OK");
        cmdok.setBounds(527, 139, 100, 25);
        lblunm = new JLabel("UserName");
        lblunm.setBounds(527, 55, 73, 25);
        lblpass = new JLabel("Password");
        lblpass.setBounds(527, 91, 100, 25);
        lbleml = new JLabel("Email ID");
        lbleml.setBounds(527, 264, 100, 25);
        lblpassreg = new JLabel("Password");
        lblpassreg.setBounds(527, 300, 100, 25);
        lblnm = new JLabel("Full Name");
        lblnm.setBounds(527, 228, 100, 25);

        // form.setResizable(false);

        // adjust size and set layout
        form.setPreferredSize(new Dimension(800, 450));

        form.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        form.getContentPane().setLayout(null);

        // add components
        form.getContentPane().add(txtunm);
        form.getContentPane().add(txtnm);
        form.getContentPane().add(txteml);
        form.getContentPane().add(cmdcreate);
        form.getContentPane().add(txtpass);
        form.getContentPane().add(txtpassreg);
        form.getContentPane().add(cmdok);
        form.getContentPane().add(lblunm);
        form.getContentPane().add(lblpass);
        form.getContentPane().add(lbleml);
        form.getContentPane().add(lblpassreg);
        form.getContentPane().add(lblnm);

        cmdcreate.setActionCommand("Create Account");
        cmdcreate.addActionListener(this);
        cmdok.setActionCommand("Login");

        JPanel panel = new JPanel();
        panel.setBounds(502, 29, 254, 154);
        panel.setFont(new Font("Palatino Linotype", Font.PLAIN, 14));
        panel.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.RAISED,
                null, null), "LOGIN", TitledBorder.LEADING, TitledBorder.TOP,
                null, null));
        panel.setBackground(SystemColor.controlHighlight);
        form.getContentPane().add(panel);

        panel_1 = new JPanel();
        panel_1.setBounds(500, 204, 254, 186);
        panel_1.setFont(new Font("Palatino Linotype", Font.PLAIN, 14));
        panel_1.setBorder(new TitledBorder(new EtchedBorder(
                EtchedBorder.RAISED, null, null), "SIGN UP",
                TitledBorder.LEADING, TitledBorder.TOP, null, null));
        panel_1.setBackground(SystemColor.controlHighlight);
        form.getContentPane().add(panel_1);

        JLabel lblNewLabel = new JLabel("New label");
        lblNewLabel.setBounds(91, 139, 286, 101);
        lblNewLabel.setIcon(new ImageIcon(
                "C:\\Users\\JAsh\\Desktop\\Projects\\JAsh.png"));
        form.getContentPane().add(lblNewLabel);

        JPanel panel_2 = new JPanel();
        panel_2.setBounds(77, 118, 315, 145);
        panel_2.setBorder(new EtchedBorder(EtchedBorder.RAISED,
                SystemColor.activeCaptionBorder, SystemColor.menu));
        panel_2.setBackground(SystemColor.controlHighlight);
        form.getContentPane().add(panel_2);
        cmdok.addActionListener(this);

        form.setResizable(false);
        form.pack();
        form.setVisible(true);
        System.out.println("const..");
    }

    public static void main(String[] args) {
        new LoginCumReg();
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        // TODO Auto-generated method stub

        if (ae.getActionCommand().equals("Create Account")) {
            new Registration(txtnm.getText(), txteml.getText(), new String(
                    txtpassreg.getPassword()));
            form.setVisible(false);
        }

        if (ae.getActionCommand().equals("Login")) {
            try {
                if (txtunm.getText().equalsIgnoreCase("admin")
                        && new String(txtpass.getPassword()).equals("admin")) {
                    form.setVisible(false);
                    new Admin();
                } else {
                    DataBase db = new DataBase();
                    db.connect();
                    String sql = "SELECT * FROM LOGIN WHERE USERNAME='"
                            + txtunm.getText() + "'";
                    ResultSet rs = db.getDDL(sql);
                    boolean found = false;
                    while (rs.next()) {
                        if (rs.getString("Password").equals(
                                new String(txtpass.getPassword()))) {
                            found = true;
                            form.setVisible(false);
                            String name = rs.getString("FullName");
                            Session.startSession(txtunm.getText(), name);
                            new FacultyWelcome();
                        }
                    }
                    if (!found)
                        JOptionPane.showMessageDialog(new JFrame(),
                                "Invalid Credentials");
                    db.close();
                }
            } catch (Exception e) {
            }
        }

    }

    @Override
    public void keyPressed(KeyEvent arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void keyReleased(KeyEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void keyTyped(KeyEvent arg0) {
        // TODO Auto-generated method stub
    //  JOptionPane.showMessageDialog(new JFrame(), arg0.getKeyChar()+"-"+arg0.getKeyCode());

    }
}

上面的代码在我朋友的笔记本电脑上完美运行,并在我的笔记本电脑上抛出了这个错误。我已经使用 Java 7 在 Eclipse Juno 上运行了代码。我还在笔记本电脑上测试并运行了很多 Java 程序,一切正常。这是唯一给出此类错误的程序。这是我最后一年的项目,我需要它在我的笔记本电脑上工作,我会很感激任何帮助的人

【问题讨论】:

  • 我在 Windows 10 中使用 jdk-8u144-windows-x64.exe 遇到了同样的问题
  • 清洁项目为我解决了这个问题
  • “请检查你的安装”——我安装了什么?
  • 您安装的 Eclipse + 任何插件。在 Eclipse 日志文件中查找线索。

标签: java mysql eclipse java-native-interface


【解决方案1】:

这个问题我已经有一段时间了,但现在我想通了。

事实证明,Java JDK 12 在 Java 12 JDK 的 bin 文件夹中同时包含 JRE 和 JDK。 (我一直认为 JRE 和 JDK 是不同的应用程序,但事实证明事情已经改变了)

我的问题是我的计算机上安装了 Java JDK 12

同时,我的计算机上安装了 Java 8 (JRE)。

所以我的电脑越来越糊涂了。

使用我的命令提示符环境设置来运行 Java 和 Javac 命令:

我输入了以下命令:

java -version  

// 这给了我 Java 8

然后,我输入:

javac -version

// 这给了我 Java 12

换句话说,我的程序正在使用 Java 12 编译,而我正在尝试使用 Java 8 运行。

为了解决这个问题,我从我的计算机上卸载了 Java 8 JRE。

回到命令提示符检查“java -version”和“javac -version”是否返回相同的版本号,是的,它返回的是Java 12。

尝试再次重新编译我的程序并运行它。成功了!!

成功了! 尤里卡!!

【讨论】:

  • 这对我有用,但我在系统上留下了 Java 8,我不得不更改项目的属性以使用 Java 12。不再出现 JNI 错误。
  • 你不需要卸载java 8,只需在你的系统上配置你的java版本sudo update-alternatives --config javac; sudo update-alternatives --config java
  • @NicoleFinnie 太复杂了,费了很多功夫。
【解决方案2】:

简答:右键单击包含 main 方法的类。点击“运行方式”。单击“Java 应用程序”。键盘快捷键为:Shift+Alt+X J(按住 Shift 和 Alt 的同时按 X;然后松开 Shift 和 Alt 并按 J)。

长答案:说实话,我不是 100% 确定为什么会出现这个问题。这可能是因为使用了不同的 jdk。 我遇到了同样的错误。解决方案比我想象的要容易。我习惯于使用 Ctrl + F11 运行我的代码。但是当我将它作为 java 应用程序运行时(我在“简短回答”中描述的方式),问题就解决了。我不确定它是否也能解决其他人的问题,但值得一试。 :)

【讨论】:

  • 您的简答有帮助。只有我需要编写一个新的应用程序名称并选择包含类的主函数。它就像魅力一样。
  • 如果java文件是android studio上android项目的一部分,你如何解决这个错误
  • 在项目层面,我将 JRE 库引用到 1.8.xx 并为我工作。谢谢
  • 当我删除所有项目配置文件时刚刚为我工作。相当于新建一个项目。
  • 这似乎是当eclipse本身使用与当前Java项目不同的JDK时发生的,在检查Eclipse ant启动器启动的Java进程的-Djava.library.path后,首先放置Eclipse JRE的dll路径, Ant的那个(用于启动配置)放在最后,所以我认为这是Eclipse Ant启动器插件的一个错误。
【解决方案3】:

通过以下方式从命令行运行 jar:

C:\folder\where\jar\stored>java -jar JarName.jar

我得到了使问题更清楚的信息:

main/Main 已由 Java 的更新版本编译 运行时

在这种情况下,jar 是用比 jre 支持的版本更新的版本编译的。

【讨论】:

  • 你如何解决这个问题?
  • @Atnas 我更改了编译器 jdk 合规性。在 Eclipse 中,它在项目属性 > java 编译器 > jdk 合规性下
  • @c0der 这解决了我的问题,谢谢!
  • @Assegd 我很高兴它做到了。考虑支持它
【解决方案4】:

错误: 发生 JNI 错误,请检查您的安装并在 Eclipse 中重试

解决方案: 检查您的包名,因为它可能与 java 中的包名冲突。只需更改包名称即可解决您的问题。 :)

【讨论】:

  • 但我应该检查什么?
  • 检查“java”或“gradle”名称
【解决方案5】:

我在包名开头使用“java”时遇到了类似的问题,例如java.jem.pc

检查你的控制台输出,我收到了:

Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.jem.pc

【讨论】:

  • 在我的情况下工作得很好......我正在使用包 java,现在更新并发现工作正常。谢谢
【解决方案6】:

我通过更改“编译器合规级别”解决了这个问题。在 Eclipse 中:

窗口 -> 首选项 -> Java -> 编译器

【讨论】:

  • 这对我有用。上面列出的“运行方式”修复没有帮助。
  • 谢谢!对我来说,问题是我之前安装了 Java 12,然后又升级到 Java 1.8,但 Eclipse 没有考虑到合规级别的 Java 版本更改。
【解决方案7】:

在我的情况下,问题是由 JDK 版本引起的。为了解决这个问题,我建议进入你的 pom 文件并检查<jdk.version>1.7</jdk.version>.

然后通过键入 java -version 在您的 cmd(windows) 或终端(OSX 或 LINUX)中检查 java 版本。

将终端\命令提示符中显示的版本与您的 pom 文件中的版本进行比较。确保它们相同。然后再次运行您的项目。

【讨论】:

    【解决方案8】:

    您好,我在一个项目中遇到了类似的问题,在带有 Maven 依赖项的 IntelliJ 中。

    我解决了将依赖范围从提供更改为编译的问题。

    IntelliJ

    文件 > 项目结构 > 模块 > 依赖项 > 范围(提供给 编译)

    【讨论】:

      【解决方案9】:

      您可以先检查控制台以查看实际的错误消息,然后继续寻找该错误的答案。

      我的控制台显示类 jcommander 的错误 NoClassDefFound。 您的错误可能与我的不同。我的错误的原因是类 jcommander 不在我的 M2 存储库中,所以我只需在我的 pom.xml 中添加该依赖项。您可以检查所有类依赖项是否都已在当前配置和项目构建中声明和添加。

      NoClassDefFoundError

      【讨论】:

        【解决方案10】:

        如果JDK版本不同,可能会发生这种情况。

        用 maven 试试这个:

        <properties>
            <jdk.version>1.8</jdk.version>
        </properties>
        

        在构建->插件下:

        <plugin>
        
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>${jdk.version}</source>
                <target>${jdk.version}</target>
            </configuration>
        
        </plugin>
        

        【讨论】:

        • 这个解决方案对我有用,竖起大拇指
        【解决方案11】:

        我也遇到了同样的问题。通过查看控制台显示的内容

        java.lang.SecurityException 问题。

        解决方案是:

        检查项目的包名。

        希望您的问题能够得到解决。如果没有,请打印您的控制台跟踪以跟踪根本原因。

        【讨论】:

          【解决方案12】:

          我遇到了同样的问题,在我的 Eclipse 设置中,编译器合规级别被选为 14。为了修复它,我将其更改为我机器上的 JDK 版本,即 1.8 并重新编译了项目。

          【讨论】:

            【解决方案13】:

            我发现将这些代码行添加到 maven 项目的 pom.xml 文件中为我解决了类似的问题:-

            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-jar-plugin</artifactId>
                        <configuration>
                            <archive>
                                <manifest>
                                    <mainClass>com.packagename.MainClassName</mainClass>
                                </manifest>
                            </archive>
                        </configuration>
                    </plugin>
            
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-shade-plugin</artifactId>
                        <version>2.3</version>
                        <configuration>
                            <createDependencyReducedPom>false</createDependencyReducedPom>
                        </configuration>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>shade</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
            

            【讨论】:

              【解决方案14】:

              检查您的控制台。它说 java.lang.SecurityException 问题。更改您的“包名称”。我将包名称从“java.assessment”更改为“assesment”,它对我有用。 如果有人知道根本原因,请告诉我。

              【讨论】:

                【解决方案15】:

                可能的解决方案 如果这些解决方案都不适合你,那么试试这个......我终于通过删除工作区文件夹中的两个文件夹“.metadata”和“.recommenders”来工作。您可以通过单击 Eclipse 应用程序工具栏中的“文件”>“切换工作区”>“其他”来找到您的工作区文件夹路径。

                现在,我是一个彻头彻尾的菜鸟,正在圣何塞州立大学攻读 SE 学位。所以我只是分享对我有用的东西,而不知道确切的原因。我不知道有什么危害或头痛,或者即使上述两个文件夹都需要删除。但最后,它对我有用,而且似乎应用程序只是重新创建了这些文件夹的新版本。

                【讨论】:

                  【解决方案16】:

                  我遇到了同样的问题,但在我的情况下,这是由于 IntelliJ IDEA 中的配置设置造成的。

                  尽管项目 SDK(文件 -> 项目结构)设置为 Java 11,但运行/调试配置(运行 -> 编辑配置)中的 JRE 设置为 Java 8。 将其更改为 Java 11 后,它就像一个魅力。

                  【讨论】:

                    【解决方案17】:

                    只需检查一小步..

                    javac-版本

                    javac 17

                    java-版本

                    java 版本“17”2021-09-14 LTS

                    Javac 和 java 版本相同,如果不同你会得到这个错误

                    【讨论】:

                      【解决方案18】:

                      我遇到了类似的问题,但在包名中得到了解决方案。 我将包名称保留为 java.basics。在控制台中,我得到了一个提示,因为它清楚地说明了禁止的包名称。所以我更改了包名,它起作用了。

                      【讨论】:

                        【解决方案19】:

                        编辑“.classpath”并包含以下标签

                        &lt;classpathentry kind="con" path="org.testng.TESTNG_CONTAINER"/&gt;

                        这可以解决你的问题。

                        【讨论】:

                          【解决方案20】:

                          我希望这对其他人有所帮助。几年前我在一个项目上工作时遇到了这个问题,然后几天前一个新项目的工作开始失败。我找到了这篇文章并试图回忆我在项目中修改的内容,然后我记得我已经更改了我的 maven pom 并删除了 maven-jar-plugin 的条目。当您构建一个目的是可执行的 jar 时,您需要包含它,以便将某些条目写入清单中。我打开了旧项目,复制了该条目(对项目名称进行了一些修改)并且它起作用了。

                          【讨论】:

                            【解决方案21】:

                            我认为这是因为您的类的名称与 JDK 中另一个类的名称相同。通过选择您的类所在的包来帮助 eclipse 确定您要运行的程序。转到运行配置选择项目和主类

                            当你按下搜索按钮选择主类时,你会找到同名但包不同的选项,选择你的类。

                            【讨论】:

                              【解决方案22】:

                              我的控制台中没有任何信息,因此让我搜索其他解决方案并找到了这些解决方案 - 此处提供的解决方案是独一无二的。我在 Eclipse Oxygen 尝试在项目上运行旧的 Ant 构建时遇到了这种情况。

                              原因 1 我已将 Eclipse 配置为使用版本 1.10.2 的外部 Ant 安装,其中显然包含使用 JDK 9 编译的类。在 Eclipse 中,我遇到了上述 JNI 错误(在命令行运行 Ant 构建给了我reknowned 'unsupported major.minor version' 错误 - 我在系统上使用的 Java 是 JDK 8)。

                              解决方案是回滚到 Ant 的嵌入式 Eclipse 版本 1.10.1。我通过单独下载 Ant 1.10.1 并重新配置 Eclipse 以在外部使用新的 1.10.1 来验证这是正确的解决方案,它仍然有效。

                              原因 2 当您在 Eclipse 的 Preferences 中错误地配置了 Ant Runtime 设置时,也会发生这种情况。根据您运行的 Ant 版本,您需要将相应 JDK 中的 tools.jar 添加到用于 Ant 运行时(主条目)的类路径中。更具体地说,如果没有适当的配置,Eclipse 会在启动 Ant 目标时抱怨 JRE 版本低于特定要求的版本。

                              本质上,“正确配置”意味着调整 Eclipse 中的每个配置项以运行 Ant,以便它们一起工作。这涉及到 Ant Runtime Home 条目(必须指向与您选择的 JDK 兼容的 Ant 版本——当针对 JDK 9 编译时,您不能使用 JDK 8 运行 Ant);在 Ant Runtime 设置中指定属于要运行 Ant 的 JDK 的 tools.jar;最后将构建脚本的 JRE 环境设置为要在外部工具配置中运行 Ant 的 JDK。所有这 3 个设置都需要同意以避免上述错误。您还需要考虑 javac 标记中使用的属性,以确保您使用的 JDK 能够按照您的指示执行(即 JDK 7 无法使用源和目标版本 8 编译代码)。

                              此外 如果您真的只是想运行 Ant 构建脚本来将代码编译到较旧的 JDK(例如,Oxygen 的 JDK 小于 8),这篇文章有助于访问 run Ant against an older JDK。有少数 Eclipse 版本的 Ant 插件替换,说明很简短,为您的特定 Eclipse 获取正确的插件版本很重要。

                              或者更简单你可以使用这个非常好的解决方案to do your legacy compile,它不需要替换你的Eclipse插件,而是在你的构建脚本中更改javac标签(同时使用最新的JDK )。

                              【讨论】:

                                【解决方案23】:

                                当我在我的项目中添加以下 maven 依赖项时,我遇到了同样的错误:

                                <artifactId>aws-encryption-sdk-java</artifactId>
                                

                                只有在我运行 ma​​ven-shade-plugin 生成的 shade jar 文件时才会出现错误。我能够通过使用 ma​​ven-assembly-plugin 生成的 jar 来克服错误。

                                【讨论】:

                                  【解决方案24】:

                                  所有对我都不起作用,但是一旦我删除了工作区的“.metadata”和“.recommenders”,还删除了“bin”和“setting”文件夹,然后在我重新导入同一个项目之后,它就起作用了对我来说。

                                  【讨论】:

                                    【解决方案25】:

                                    我的问题来自于尝试从我的项目中禁用 Maven 特性,然后删除 pom.xml 文件。这很糟糕,非常糟糕,不要这样做。如果这样做,请将其更改回 Maven 项目,希望您可以恢复旧的 pom.xml 文件或创建一个新文件。一旦我这样做了,它就再次起作用了。

                                    编辑:我最近又遇到了这个问题,这次是因为我的类路径中有重复的库。 Maven 添加的一个(以 /M2_REPO/.... 开头,然后是我添加的一个(我不应该这样做)。即使 Eclipse 报告它找不到类,实际问题是我有给它两个具有相同类的库,它不知道要使用哪一个。一旦我删除了第二个引用,它就起作用了。

                                    【讨论】:

                                      【解决方案26】:

                                      在 Netbeans 8.0.2 中遇到了同样的问题。 Clean and Build Project 解决了这个问题。

                                      【讨论】:

                                        【解决方案27】:

                                        您可以尝试: 右键单击项目,然后单击清理。在此之后运行项目。

                                        它对我有用。

                                        【讨论】:

                                          【解决方案28】:

                                          在一个版本的jdk上编写的程序将不支持另一个版本的jdk的JNI平台。如果我们使用 jdk10 和 jdk8,eclipse 为 jdk10 配置并在 jdk10 上编写代码。现在,我不想使用 jdk10 并开始使用 jdk8 作为 jvm 并尝试运行写在 jdk10 上的代码,所以 eclipse 将通过 JNI 的错误。所以,为了摆脱这个错误,请将当前JVM路径添加到eclipse.ini文件中,然后将编写的代码复制到剪贴板并在eclipse中删除项目并创建新项目并签入复制的代码并运行。

                                          【讨论】:

                                            【解决方案29】:

                                            如果在启动 ANT 时出现问题,请检查您的 ANT HOME:它必须指向您正在运行的同一个 eclipse 文件夹。

                                            当我重新安装一个新的 eclipse 版本并删除了以前的 eclipse fodler 同时保留了以前的 ant 主页时发生了这种情况:ant 根本没有找到任何 java 库。

                                            在这种情况下,这个原因并不是 JDK 版本不好。

                                            【讨论】:

                                              【解决方案30】:

                                              我遇到了同样的问题,因为在重命名包名称后打包名称是“Java”它没有引发错误。

                                              【讨论】:

                                                猜你喜欢
                                                • 2020-01-13
                                                • 1970-01-01
                                                • 1970-01-01
                                                • 2016-12-25
                                                • 1970-01-01
                                                • 1970-01-01
                                                • 1970-01-01
                                                • 1970-01-01
                                                • 1970-01-01
                                                相关资源
                                                最近更新 更多