1

Windowsで完全に動作する64ビットのfedoraで.jarを実行しようとしています。

最初に私は試します:

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はJava6で導入されたため、Java5.0でコードをコンパイルできないのも不思議ではありません。

ソースコードにアクセスできないため、何が起こっているのかを推測する必要があります。ClassCastExceptionは、コードが次のようなことを行うことを意味します。

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

ただし、DataObject_NodeはDefaultMutableTreeNodeのサブクラスではないため、ClassCastExceptionが発生します。これは実行できないためです。したがって、私には、コードのバグのように見えます。

于 2013-01-29T14:07:52.000 に答える
1

考えられる(とてつもない)原因の1つ:

あるOSで実行され、別のOSでは実行されない場合、jarはzip形式であるため、Java(まだ?)は圧縮/解凍にネイティブコードを使用することを覚えておく必要があります。最近(Java 7)の java.util.zip はエンコーディングを処理できますが、誰が知っていますか。

別のエンコーディングでパッケージ名またはクラス名を使用した可能性があります。瓶の中の7zipを見てください。または、考えてみると$、名前に a が付いています。

于 2013-01-29T14:26:55.623 に答える