Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 德比安;JDK的新安装会对主要版本和次要版本不匹配发出警告和运行时错误_Java_Debian - Fatal编程技术网

Java 德比安;JDK的新安装会对主要版本和次要版本不匹配发出警告和运行时错误

Java 德比安;JDK的新安装会对主要版本和次要版本不匹配发出警告和运行时错误,java,debian,Java,Debian,我必须为运行Debian的专用硬件开发GUI。因此,我得到了一个它将运行的硬件示例,我安装了最新的JRE,因为它没有太多安装,将我的代码从我的开发环境移到了一个不太旧的Fedora Core box上,启动了该应用程序并获得: Exception in thread "main" java.lang.UnsupportedClassVersionError: mygui/MYGUI : Unsupported major.minor version 52.0 考虑到这一点,我做了典型的yum更

我必须为运行Debian的专用硬件开发GUI。因此,我得到了一个它将运行的硬件示例,我安装了最新的JRE,因为它没有太多安装,将我的代码从我的开发环境移到了一个不太旧的Fedora Core box上,启动了该应用程序并获得:

Exception in thread "main" java.lang.UnsupportedClassVersionError: mygui/MYGUI : Unsupported major.minor version 52.0
考虑到这一点,我做了典型的yum更新,然后进行了构建,得到了同样的结果。。。因此,决定只在新的box本身上进行构建,我安装了JDK。然后,我使用新安装的JDK进行了构建,结果很好,但是对于一个文件-我的坏文件名/类名不匹配-因此我修复了它,并重新编译了一个文件,得到:

warning: /opt/mygui/lib/fubar.class: major version 52 is newer
than 51, the highest major version supported by this compiler.
  It is recommended that the compiler be upgraded.
1 warning
这告诉我编译器本身一定有一个bug!它所看到的只是它自己刚刚构建的文件!一位团队成员建议我删除JRE,但我不认为这有什么帮助,因为编译器本身肯定错误地标记了输出

在你提问之前:

# javac -version
javac 1.7.0_111
# java -version
java version "1.7.0_111"
OpenJDK Runtime Environment (IcedTea 2.6.7) (7u111-2.6.7-1~deb8u1)
OpenJDK Zero VM (build 24.111-b01, interpreted mode)
我想其他人也看到了-有人吗

还没有完成,因为编译器只给出了一个警告,所以我去运行它。最初的画面显示得很好,我想一切都修好了!耶!但随后我尝试单击一个菜单项,该菜单项将显示一个新的帧,但新帧没有启动,而是在错误消息转储的顶部:

Exception in thread "AWT-EventQueue-0"
java.lang.UnsupportedClassVersionError: mygui/secondframe : Unsupported
major.minor version 52.0
好的,它坏了。有人吗

注意:我发现了另一个,但它显然与我的场景不同

更新:好的,我已经知道Java认为它有版本不匹配。关注这个问题的人关注的是错误的问题。问题是它怎么可能认为它是错误的版本?更重要的是,我该怎么办

更新二:根据下面Laksitha Ranasingha的建议,我运行了他推荐的javap命令,答案是:

$ javap -v mygui.MYGUI | grep major
  major version: 51
因此,这表明JDK和java运行时环境都存在一个bug,不管它是来自我安装的JRE还是我后来安装的JDK,我都不知道。出于某种原因,试图对同一个包的部分进行更多编译或运行该包的javac和java程序都得到了错误的数据

更新三:我真的不在乎版本是什么,也没有外部库或应用程序。所有这些——我是说所有这些——都是由同一个版本编译的。涉及版本7的唯一原因是硬件供应商向我/我们/他们的客户指出了它。这是他们的产品,三月份发布,基本上是一年前:

他们告诉我们如何添加Java。总之,他们说:

# apt-cache search openjdk
然后选择最小的一个,然后运行:

# apt-get install openjdk-7-jre
我做到了,后来做到了:

# apt-get install openjdk-7-jdk
在这一切开始之后,我做到了——并且得到了:

# apt-get install openjdk-8-jdk

Package openjdk-8-jdk is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
我认为现在还没有第8版

……所以。。。也许我必须删除所有这些并以其他方式安装软件包。但是怎么做呢?这不是一个强大的盒子。在我的开发系统上花费数秒的编译在这件事上花费了超过20分钟


第四个也是最后一个更新:……我认为这个问题最好在ServerFault论坛或者超级用户论坛上讨论,因为它不是一个编程问题。我想我是老同学了,从这个网站的早期开始就在这里,那时这里是唯一的论坛。但反对票只是一个线索。问题是,我见过论坛之间的问题迁移,但不知道如何做到这一点。如果有人愿意评论如何做到这一点,这可能会让这里的人们更高兴,他们不必处理非编程问题,同时提高我的成功率。或者,我可以重新输入它。

您正在尝试在Java 7上运行Java 8编译应用程序,这是不可能的。 您可以使用以下方法检查您的类版本:

javap-v fubar.class | grep专业

即使设置源和目标也不起作用。如果不使用Java8特性或将JRE升级到Java8,则需要用Java7编译源代码。 本Oracle文档描述了如何确定类版本。

来源于维基百科,版本编号如下:

Java SE 10 = 54 (0x36 hex),[3]
Java SE 9 = 53 (0x35 hex),[4]
Java SE 8 = 52 (0x34 hex),
Java SE 7 = 51 (0x33 hex),
Java SE 6.0 = 50 (0x32 hex),
Java SE 5.0 = 49 (0x31 hex),
JDK 1.4 = 48 (0x30 hex),
JDK 1.3 = 47 (0x2F hex),
JDK 1.2 = 46 (0x2E hex),
JDK 1.1 = 45 (0x2D hex)

这也会有帮助。

好吧,原来是安装问题

一个关键线索是:

# apt-get install openjdk-8-jdk

Package openjdk-8-jdk is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
由于所有可用的类文件都来自于此编译器创建的内容,并且由于其他注释或答案都没有注意安装问题,因此我认为这是一个可能的途径

因此,我的想法是,这一行尤其重要:

Package openjdk-8-jdk is not available, but is referred to by another package.
因此,我删除了所有与Java相关的内容,只重新安装了JDK。我还删除了以前构建的所有内容,只剩下源java文件,然后重新编译了所有内容

令我高兴的是,这起了作用

所有投反对票的人都需要重新考虑他们的观点。安装问题
ms是真实的,不一定是工作人员的错。安装错误也会发生。

是。您已经使用Java8编译了一些类。您需要升级到Java8。“您将无法使其与Java 7一起工作。@ElliottFrisch抱歉,Elliot,您把我弄丢了。”。我不给飞鱼什么版本;它是相同的编译器和相同的运行时环境。那么,你在说什么?我怎么会有错误的版本?此外,据我所知,这是最新的版本。如果我错过了,你需要解释清楚。否则,在我看来就像是一个bug。错误消息java.lang.UnsupportedClassVersionError:mygui/mygui:Unsupported major.minor version 52.0表示mygui/mygui是用java 8编译的。您不能运行依赖于在Java 7上使用Java 8编译的任何类的代码。该错误表示,不管您说什么/THINK/ASSERT,它都是用Java8编译的。你不会以任何其他方式得到那个错误。@ElliottFrisch好的,很好;这有什么用?我认为这是一个编译器错误,将刚刚创建的代码标记为低于应该的版本-只是猜测而已。或者,换句话说,当它声称是版本7编译器时,它是如何创建Java 8代码的?你知道这里的人是志愿者吗?上面这样的注释真的没有必要。感谢您的尝试,但问题不是为什么会出现错误消息,而是7版编译器如何创建自己不满意且不会运行的代码?缺陷正当请关注真正的问题,即安装。假设这是我制造的一个问题,我就是不注意。请注意,创建所有类文件时使用的编译器与读取类文件的java程序版本相同。没有涉及其他文件。我没有混合和匹配版本!在考虑javac中的一个bug之前,运行javap命令后您得到了什么?答案是试图给你一个不谈论错误信息的解决方案。谢谢LR,它说主要版本:51。没问题。根据更新2,您现在指向一个不同的类m16gui.m16gui。但是这个异常显然发生在mygui/secondframe类上。不是吗?我很好奇。和/opt/mygui/lib/fubar.class-那是什么?