java - 用记事本编写并通过命令提示符启动的 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 时在做什么并且不小心把它搞砸了,真的,真的,很糟糕。谢谢您的帮助。
解决方案
您的 FrameTester.java 程序是正确的,没有任何问题。
看起来 PATH 和 JAVA_HOME 变量在您的环境中被弄乱了。我建议使用 echo %PATH% 和 %JAVA_HOME% 命令在命令提示符下打印它们,并确认使用的 JDK 版本是正确的。即 PATH 和 JAVA_HOME 都指向同一个 JDK 或 JRE 文件夹。如果不解决问题。希望它能解决您的问题。
推荐阅读
- php - 使用 Laravel Eloquent 从列中直接增加或减少数字更新
- r - 什么 R Shiny 布局允许我插入地图作为整个页面的背景?
- excel - 如何修复代码:通过 VBA 将单元格注释复制粘贴到另一个单元格
- excel - 调整范围和转置数组时出现错误 1004
- aws-lambda - AWS Lambda:在另一个成功完成时调用函数
- python - 如何在 Python 中制作窗口和输入框?
- c# - 如何在使用 MVVM 模式在 WPF 中创建对话框时实例化对话框并记录用户输入
- azure - Azure Function App 中的服务总线队列锁定令牌已过期错误
- python - 如何获得两个不同 numpy.ndarray 子类的 __matmul__ 以返回特定子类?
- amazon-web-services - 将 Kubernetes 部署部署到不同环境并在配置中处理内部版本号的最佳实践