1

我正在尝试在 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

我的想法不多了。

4

2 回答 2

1

javax.swing.filechooser。FileNameExtensionFilter是在 Java 6 中引入的,所以难怪你不能用 Java 5.0 编译你的代码。

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

DefaultMutableTreeNode object1 = doSomething();
DataObject_Node object2 = (DataObject_Node)object1;

但是 DataObject_Node 不是 DefaultMutableTreeNode 的子类,所以你会得到一个 ClassCastException,因为你不能这样做。所以,对我来说,它看起来像是代码中的一个错误。

于 2013-01-29T14:07:52.000 回答
1

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

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

也许您使用了另一种编码的包或类名。看看罐子里的 7zip。或者想一想,$名字中有一个。

于 2013-01-29T14:26:55.623 回答