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

时间:2014-03-13 14:09:48

标签: java mysql eclipse java-native-interface

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程序。这是唯一一个出现这种错误的程序。这是我的最后一年项目,我需要它在我的笔记本电脑上工作,我会很乐意帮助任何人

38 个答案:

答案 0 :(得分:24)

简答:右键单击包含main方法的类。单击“运行方式”。单击“Java Application”。键盘快捷键为:Shift + Alt + X J(按住Shift和Alt,按X;然后释放Shift和Alt并按下J键。)

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

答案 1 :(得分:9)

我已经有一段时间这个问题了,但是现在我知道了。

事实证明,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”是否返回相同的版本号,是的,它返回Java12。

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

成功了! 尤里卡!

答案 2 :(得分:8)

使用' java'时遇到类似的问题在包名称的开头,例如java.jem.pc

检查你的控制台输出,我收到了:线程中的异常" main" java.lang.SecurityException:禁止的包名:java.jem.pc

答案 3 :(得分:7)

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

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

答案 4 :(得分:4)

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

C:\folder\where\jar\stored>java -jar JarName.jar我得到的信息使问题更加明确:

  

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

enter image description here

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

答案 5 :(得分:4)

在我的情况下,问题是由 JDK版本引起的。要解决此问题,我建议您进入您的pom文件并查看<jdk.version>1.7</jdk.version>.

然后输入以下命令检查cmd(windows)或终端(OSX或LINUX)中的java版本: java -version

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

答案 6 :(得分:3)

我也面临同样的问题。通过查看说出来的控制台

  

java.lang.SecurityException问题。

解决方案是:

  

检查项目的包裹名称。

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

答案 7 :(得分:3)

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

尝试使用maven:

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

在build-&gt;插件下:

<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>

答案 8 :(得分:2)

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

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

NoClassDefFoundError

答案 9 :(得分:1)

可能的解决方案 如果没有这些解决方案适合你,那么试试这个......我终于通过删除两个文件夹&#34; .metadata&#34; &安培; &#34; .recommenders&#34;在工作区文件夹中。您可以通过单击&#34;文件&#34;&gt;&#34;切换工作区&#34;&gt;&#34;其他&#34;来找到工作区文件夹路径。在Eclipse应用程序的工具栏中。

现在,我是一名完整的菜鸟,正在圣何塞州立大学攻读学士学位。所以我只是在分享对我有用的东西,却不知道究竟为什么。我不知道什么是伤害或头痛,或者即使两个上述文件夹都需要删除。但最终,它对我有用,似乎应用程序只是重新创建这些文件夹的新版本。

答案 10 :(得分:1)

我发现将这些代码行添加到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>

答案 11 :(得分:1)

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

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

IntelliJ

  

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

答案 12 :(得分:1)

我解决了它,更改了“编译器合规性级别”。在Eclipse中:

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

答案 13 :(得分:1)

检查您的控制台。它说java.lang.SecurityException问题。更改您的套餐名称&#39;。我从&#39; java.assessment&#39;更改了我的包名评估&#39;评估&#39;它对我有用。 如果有人知道根本原因,请告诉我。

答案 14 :(得分:0)

接受的答案没有解决问题,因此发布了对我有用的答案。

错误/问题: 在尝试将我的应用程序作为 Java 应用程序或 Spring 启动应用程序运行时, 我收到以下错误

A JNI error has occurred, please check your installation and try again. A Java exception has occured.

以及在控制台上收到此错误 Exception in thread "main" java.lang.UnsupportedClassVersionError: com/example/demo/IocApplication has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

根本原因是什么?

这个错误的原因是

  • 代码正在更高版本上编译,就我而言,它是版本 11.. 和
  • 代码在较低版本上执行,在我的情况下是版本 8。
  • 即:Java(JDK) 在 11 上编译代码,其中 JRE 版本为 8。

我在哪里配置了 JDK 11 和 JRE 8?

  • 我正在使用 SpringToolSuite (STS)。当我创建项目时,构建路径中添加的 JRE 系统库是默认的 JRE 库版本 8 (1.8) 但是当我转到项目 -> 属性 -> Java 编译器 -> 编译器合规性级别时,默认情况下选择的版本为 11

解决方案:

项目 -> 属性 -> Java 编译器 -> 编译器合规级别

  • 将编译器合规性级别设置为 1.8 而已。 现在您正在 1.8 中编译代码并使用 JRE 1.8 执行编译后的代码。

答案 15 :(得分:0)

如果在运行Java应用程序时遇到此错误,请检查是否有一些类名或以“ java。”开头的包名,如果是,请更改包名。发生这种情况是因为您的软件包名称与Java系统文件名冲突。

答案 16 :(得分:0)

使用gradle以下内容也对我有用:

Package Explorer->右键单击项目-> Gradle -> 刷新Gradle项目

答案 17 :(得分:0)

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

对我有用。

答案 18 :(得分:0)

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

enter image description here

答案 19 :(得分:0)

有同样的问题。 我已经导入了一个新版本的json库(删除了旧版本的json库-但未将其从构建路径中删除)。通过从构建路径中删除对旧版本的引用来解决该问题

答案 20 :(得分:0)

这是一个核心问题。试试 javac --versionjava --version 。您会看到不匹配或不一致的情况。 尝试正确设置路径变量,您将不会看到任何错误。

对于 Eclipse,右键单击项目 --> 属性。转到项目方面并将 JDK 设置为所需的版本。转到运行时并将 JRE 设置为相同的版本。你应该很好。

答案 21 :(得分:0)

就我而言,Eclipse给了我这个错误,但是我在日志中的javax.servlet.http.HttpServlet上得到了classnotfoundexception。

就我而言,我试图在build.gradle中使用exclude module: 'spring-boot-starter-tomcat'启动一个春季启动应用程序(因为我正在Wildfly上进行部署)。

解决方案是将此评论排除在外。 Eclipse JNI错误非常容易引起误解,我建议您解决此问题。

答案 22 :(得分:0)

我试图运行我的 jar(没有外部 jar)在运行时添加库 java -cp "..." -jar myCode.jar 但是当您指定 -jar 时,-cp 参数 将被忽略< /strong>。

所以你可以在类路径中包含你的 jar 然后调用你的主类:

java -cp "myCode.jar:/path/to/jars/*" foo.bar.MyMainClass

https://stackoverflow.com/a/18413058

答案 23 :(得分:0)

我遇到了同样的问题,但是就我而言,这是由于IntelliJ IDEA中的配置设置。

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

答案 24 :(得分:0)

在 Eclipse 中运行 Java 和 JavaFX 应用程序时,我遇到了同样的问题。但我得到了简单的解决方案。我已经从构建路径中删除了 Jdk 1.8,并将相同的 jdk 1.8 添加到了构建路径中。现在可以使用了。

答案 25 :(得分:0)

我遇到了同样的问题,因为在重命名程序包名称后,程序包名称为“ Java”,不会引发错误。

答案 26 :(得分:0)

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

当我重新安装新的eclipse版本并删除previouis eclipse fodler并保留以前的ant宿主时,这发生在我身上:ant根本没有找到任何Java库。

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

答案 27 :(得分:0)

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

答案 28 :(得分:0)

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

答案 29 :(得分:0)

一切都不适合我,但一旦我删除&#34; .metadata&#34; &安培; &#34; .recommenders&#34;工作区和删除&#34; bin&#34;和&#34;设置&#34;文件夹,然后在我重新导入同一个项目后,它对我有用。

答案 30 :(得分:0)

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

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

只有当我运行 maven-shade-plugin 生成的阴影jar文件时才出现错误。我能够通过使用 maven-assembly-plugin 生成的jar来克服错误。

答案 31 :(得分:0)

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

原因1 我已经将Eclipse配置为使用版本为1.10.2的外部Ant安装,其中显然有使用JDK 9编译的类。在Eclipse中我得到了上面描述的JNI错误(在命令行运行Ant构建给了我重新认识'不支持的major.minor版'错误 - 我在系统上使用的Java是JDK 8)。

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

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

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

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

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

答案 32 :(得分:0)

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

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

答案 33 :(得分:0)

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

当您按搜索按钮选择主要课程时,您会找到名称但包装的选项,请选择您的课程。

答案 34 :(得分:0)

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

答案 35 :(得分:0)

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

<classpathentry kind="con" path="org.testng.TESTNG_CONTAINER"/>

这可以解决您的问题。

答案 36 :(得分:0)

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

答案 37 :(得分:-1)

在Netbeans 8.0.2中:

  1. 右键单击您的包裹。
  2. 选择&#34;属性&#34;。
  3. 转到&#34;运行&#34;选项。
  4. 通过浏览您的班级名称选择主要课程。
  5. 点击&#34;确定&#34;按钮。