首页 > 解决方案 > 用记事本编写并通过命令提示符启动的 Java 程序在编写类时都会遇到相同的错误

问题描述

我在 Windows 记事本中制作了一个 hello world 程序,但是当我尝试运行它时,我不断收到一个类错误。

我最初从excel文档中复制粘贴了代码,所以我尝试完全重写它,以防它是某种字体问题,但没有运气。我还认为这可能是我安装 Java 的方式存在某种问题,但是我已经卸载了所有内容并重新安装了多次,所以除非我一直做错,否则我不知道这是否是问题所在。

这是代码:

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JTextField;
import java.awt.Color;
public class FrameTester{
    public static void main(String[] args){
        JFrame frame = new JFrame();
        frame.setSize(200,200);
        JTextField text = new JTextField("Hello, World!");
        text.setBackground(Color.BLUE);
        frame.add(text);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}       

程序文件中的java文件夹中有两个文件夹:一个名为jdk-12,另一个名为jre1.8.0_202。它们是在不同的日子安装的。首先安装 jdk 文件夹。我有一个名为 C:\Program Files\Java\jdk-12\bin 的环境变量

它应该在蓝色背景上弹出一个显示“Hello world”的窗口。同一程序在另一台计算机上为其他人工作。我们都使用 Windows 10。我从来没有能够在我的计算机上运行 java 程序。我之前尝试了一个不同的 hello World 程序,我得到了同样的错误。

这就是我在命令提示符中启动它的内容:

C:\Program Files>javac FrameTester.java

这就是错误所说的:

FrameTester.java:5: error: error while writing FrameTester: C:\Program Files\FrameTester.class
public class FrameTester{
       ^
1 error

我不知道问题是什么。帮助!

更新:我将程序放在文档文件夹中并尝试运行它,现在它给了我更详细的错误消息,但我仍然不知道如何修复它。

C:\Users\orang\Documents>java FrameTester
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: FrameTester has been compiled by a more recent version of the Java Runtime (class file version 56.0), this version of the Java Runtime only recognizes class file versions up to 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        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)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

当我这样做时java -version,我得到了这个:

java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)

但是当我这样做时javac -version,我得到了这个:

javac 12

我很确定他们应该是一样的。我一定是在安装的某个地方搞砸了。我现在真的不知道该怎么办。

编辑:感谢您将问题标记为重复。另一个答案真的很有帮助。由于某种原因echo %JAVA_HOME%没有返回任何东西,所以我不能用它来解决我的问题。我不得不做其他事情来解决它。我想我会留下这个,以防有人像我一样并且不知道他们在安装 java 时在做什么并且不小心把它搞砸了,真的,真的,很糟糕。谢谢您的帮助。

标签: javaclass

解决方案


您的 FrameTester.java 程序是正确的,没有任何问题。

看起来 PATH 和 JAVA_HOME 变量在您的环境中被弄乱了。我建议使用 echo %PATH% 和 %JAVA_HOME% 命令在命令提示符下打印它们,并确认使用的 JDK 版本是正确的。即 PATH 和 JAVA_HOME 都指向同一个 JDK 或 JRE 文件夹。如果不解决问题。希望它能解决您的问题。


推荐阅读