jar在linux上不工作:ClassCastException/javax/无法强制转换为

jar在linux上不工作:ClassCastException/javax/无法强制转换为,java,executable-jar,Java,Executable Jar,我正在尝试在64位fedora上运行一个.jar,它可以在windows上完美运行 首先,我尝试: java -version java version "1.6.0_17" java -jar myprog_TABS_Dec30.jar 我得到: Exception in thread "main" java.lang.ClassCastException: javax.swing.tree.DefaultMutableTreeNode cannot be cast to mypro

我正在尝试在64位fedora上运行一个.jar,它可以在windows上完美运行

首先,我尝试:

java -version  
java version "1.6.0_17"  
java -jar myprog_TABS_Dec30.jar
我得到:

Exception in thread "main" java.lang.ClassCastException: javax.swing.tree.DefaultMutableTreeNode cannot be cast to myprog.view.tree.DataObject_Node
然后我检查:

file Analyseries2011_TABS.class
Analyseries2011_TABS.class: compiled Java class data, version 49.0 (Java 1.5)
所以我安装了:jdk-1_5_0_22-linux-amd64-rpm.bin:

/usr/java/jdk1.5.0_22/bin/java -jar myprog_TABS_Dec30.jar
结果:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/swing/filechooser/FileNameExtensionFilter
最后,我查看了META-INF目录中的MANIFEST.MF:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Created-By: 1.7.0_01-b08 (Oracle Corporation)
Class-Path: 
X-COMMENT: Main-Class will be added automatically by build
Main-Class: myprog.core.main.myprog_TABS
好的,让我们试试:

/usr/java/jre1.7.0_01/bin/java -jar myprog_TABS_Dec30.jar
猜猜看

Exception in thread "main" java.lang.ClassCastException: javax.swing.tree.DefaultMutableTreeNode cannot be cast to myprog.view.tree.DataObject_Node
我的点子快用完了。

javax.swing.filechooser。是在Java6中引入的,所以您不能用Java5.0编译代码也就不足为奇了

由于您无法访问源代码,我们将不得不猜测发生了什么。ClassCastException表示代码执行以下操作:

DefaultMutableTreeNode object1 = doSomething();
DataObject_Node object2 = (DataObject_Node)object1;
但是DataObject_节点不是DefaultMutableTreeNode的子类,因此您会得到一个ClassCastException,因为您不能这样做。因此,对我来说,它看起来像是代码中的一个bug。

一个可能的(牵强的)原因:

如果它运行在一个操作系统而不是另一个操作系统上,那么必须记住,java(仍然?)使用本机代码进行压缩/解压缩,因为JAR是zip格式的。现在(Java7)java.util.zip可以处理编码,但谁知道呢


可能您在另一种编码中使用了包或类名。看看罐子里的拉链。或者想想看,名字里有一个
$

你真的有这样的演员吗?你能发布一些代码吗?至少你的DataObject_节点类和你将它转换为DefaultMutableTreeNode的位置?我没有源代码,我只是想让它实际运行。。。我会尝试打开这个类,如果我能读到它,我会回复你。如果没有源代码,就很难理解发生了什么…谢谢,知道这个很好,但是现在我仍然想知道为什么它不是用Java 6和7编译的。正如大家说的,如果没有源代码就无法解决它,我想我必须结束我的问题。我没有想到这一点,因为这个.jar可以在windows上运行,所以我更关注环境问题。我不明白它如何在windows上运行。你确定两个jar都是一样的吗?你让我怀疑:),但我刚刚检查过,它正在运行。我已经用“归档管理器”而不是7zip查看了.jar,并且在一些类的文件名中有一些“$”。。。这就是你说的吗?我很确定该软件是在windows上构建的。没有,但是编译器使用“$”为内部类等创建文件名。当我看到名称中的下划线时,我想知道一些名称是否有特殊字符,比如
公共类DataNode_Object extensed MyFaçade
-“ç”。或者一个包(文件夹)名称。我检查了名称,没有得到任何特别的信息,只有字母上下数字和$。另一个提示,尝试在Windows上安装OpenJDK,并在该版本中试用。也许是oraclejdk/openjdk(但为什么会这样)。