KNOWLEDGE BASE - 知られているバグと対処法
SophiaCompress(Java) のバグ情報やその対処法などを掲載しています。
KBSC0022
圧縮後のアプリで "java.lang.Error" が発生する不具合
Version : 4.0.0 ~ / Date : 2006/07/11
KBSC0021
Version : 4.0.0 ~ / Date : 2006/07/11
KBSC0020
Version : 2.4.0 ~ 4.0.0 / Date : 2006/06/06
KBSC0019
Version : 2.4.0 ~ 4.0.0 / Date : 2006/03/13
KBSC0018
Version : 3.0.0 ~ 3.0.10 / Date : 2005/04/25
KBSC0017
Version : ALL / Date : 2005/03/28
KBSC0016
Version : 3.0.9 / Date : 2005/03/17
KBSC0015
Version : ALL / Date : 2005/03/15
KBSC0014
Version : 3.0.0 ~ / Date : 2005/03/15
KBSC0013
Version : 3.0.0 ~ 3.0.3 / Date : 2004/12/16
KBSC0012
Version : 3.0.0 ~ 3.0.2 / Date : 2004/12/16
KBSC0011
Version : 3.0.0 ~ 3.0.2 / Date : 2004/12/16
KBSC0010
Version : 3.0.0 ~ 3.0.1 / Date : 2004/09/09
KBSC0009
Version : トライアル版 / Date : 2004/08/19
KBSC0008
Version : ~ 3.0.0 / Date : 2003/10/21
KBSC0007
Version : ~ 2.3.0 / Date : 2004/08/19
KBSC0006
一つの JAR ファイル内にアプリが複数ある場合、圧縮に失敗する不具合
Version : ~ 2.2.X / Date : 2003/09/17
KBSC0005
JAD ファイル内に一行が72バイト以上になる行が存在する場合、圧縮に失敗する不具合
Version : ~ 2.2.X / Date : 2003/09/17
KBSC0004
JAM ファイル内のアプリ名などに絵文字を使用した場合、圧縮に失敗する不具合
Version : ~ 2.4.3 / Date : 2003/09/17
KBSC0003
Version : 2.X.X / Date : 2003/09/17
KBSC0002
SophiaCompress のウィンドウのサイズが異常になる不具合
Version : 2.X.X / Date : 2003/09/17
KBSC0001
Version : 2.2.0 / Date : 2003/09/17
圧縮後のアプリで "java.lang.Error" が発生する不具合 (KBSC0022) 2006/07/11
- 対象 :
- 2.0.x ~ 4.1.1
- 症状 :
- 圧縮オプションとして [クラス融合] を使用した場合、圧縮後のアプリを起動後、すぐに "java.lang.Error" が発生する。
- 原因 :
- 抽象メソッドのあるクラスやインターフェースなどを、実装のない抽象クラスが継承している場合に発生します。
- 解決 :
- クラス融合機能を使用せずに圧縮するか、問題があるコードを修正してください。
- 詳細 :
- この不具合は SophiaCompress(Java) 4.2.0 で修正されます。
ライセンス申請用メールが文字化けする不具合 (KBSC0021) 2006/07/11
- 対象 :
- 4.0.0 ~
- 症状 :
- インストール後、起動時にライセンス認証を求めるダイアログで [申し込む] ボタンを押すとメーラが起動するが、その時、メールの内容が文字化けしている。
- 原因 :
- Microsoft Outlook Express 以外のメーラを使用されると、このような現象が発生することがあります。
- 解決 :
- Microsoft Outlook Express を「標準のメーラ」に設定してください。ただし、文字化けしたままのメールでも、ライセンス発行は可能です。
なお、この現象は SophiaCompress(Java) 自体の動作には影響ありません。 - 詳細 :
- 現在、Thunderbird 1.0.x で発生する事が確認されています。
圧縮中に失敗する不具合 (KBSC0020) 2006/06/06
- 対象 :
- 4.0.0 ~
- 症状 :
- 圧縮中にエラーダイアログが表示され、停止します。エラーログ中では、MSD クラスでエラーが発生したと表示されます。
「2. 圧縮中にエラーが発生しました。 詳細:java.lang....Error: ... at MSD.J(Unknown Source)」 - 原因 :
- インストールされている DLL が正しくない場合に発生します。
- 解決 :
- SophiaCompress(Java) をアンインストールし、再インストールしてください。
インストーラーを実行する際には、必ず SophiaCompress(Java) を終了させてください。 - 詳細 :
- 次のバグフィックスバージョン(4.1.3)で修正される予定です。
圧縮中に失敗する不具合 (KBSC0019) 2006/03/13
- 対象 :
- 2.4.0 ~ 4.0.0
- 症状 :
- 圧縮中にエラーダイアログが表示され、停止する。ダイアログには「圧縮中にエラーが発生しました。詳細:java,lang,RUntimeException:ExceptionTable 1: ... 」と表示される。
- 原因 :
- 未使用 'try-catch' ブロックの削除 (不必要な例外テーブルの削除) 機能の不具合です。
- 解決 :
- 未使用 'try-catch' ブロックの削除 (不必要な例外テーブルの削除) 機能を使用しない場合、この不具合は発生しません。
- 詳細 :
- バグフィックスバージョン(4.0.1)で修正されました。
圧縮後のアプリが動かない不具合 (KBSC0018) 2005/04/25
- 対象 :
- 3.0.0 ~ 3.0.10
- 症状 :
- JAR ファイル内にメインクラスが無い。ADF ファイルのメインアプリクラスの項にクラス融合・クラス名短縮の影響が反映されない。
- 原因 :
- クラス融合の不具合です。アプリクラス (IApplication のサブクラスや MIDlet のサブクラス)が複数ある場合に起こることがあります。
- 解決 :
- アプリクラスが複数ある場合、対象バージョンではクラス融合を行わないでください。クラス融合を行わない場合は、この不具合は発生しません。
- 詳細 :
- アプリクラスが複数ある場合でも、クラス融合を行って正常に圧縮できることがあります。この不具合は実行時依存であるためです。
圧縮後のアプリが動かない不具合 (KBSC0017) 2005/03/28
- 対象 :
- ALL
- 症状 :
- JARファイル内のリソースへのアクセスが圧縮することによって失敗するようになることがある。
- 原因 :
- クラス融合やクラス名短縮機能によりクラスが存在するパッケージが変化することにより、リソースに対しての相対パスによるアクセスに失敗するようになります。
- 解決 :
- リソースへのアクセスを絶対パスにするか、クラス融合・クラス名短縮機能をオフにしてください。絶対パスによるアクセスではこの問題は発生しません。
圧縮後のアプリが動かない不具合 (KBSC0016) 2005/03/17
- 対象 :
- 3.0.9
- 症状 :
- 圧縮後のアプリをエミュレータや実機で動作させると、APIへのアクセス権限がない趣旨のエラーメッセージが出力されて止まる。
エラーメッセージ例:Cannot access class com/nttdocomo/???/??? from ??? - 原因 :
- Ver.3.0.9 に、開発途中の機能が入り込んでいたのが原因でした。ライブラリの、利用する側からの側面と実装が異なるメソッドにアクセスする場合に起こります。
- 解決 :
- Ver.3.0.9は利用しないでください。バグフィックスされたVer.3.0.10、もしくはVer.3.0.8以前ではこの不具合は発生しません。
- 詳細 :
例を挙げます。
import com.nttdocomo.ui.*; public class Main extends IApplication { public void start() { Panel panel = new Panel(); Button button = new Button("test"); button.requestFocus(); panel.add(button); Display.setCurrent(panel); } }
この例の場合、Button クラスの requestFocus メソッドを使用しています。API リファレンスを見ると、このメソッドは Button クラスで初めて定義され、親クラスである Component クラスは持っていません。しかし、ライブラリの中をのぞいてみると、Button クラスの親クラスには AbstractButton クラスが (非 public 属性で)定義されており、requestFocus はそこで定義され、Button クラスではそのまま継承されているだけです。このようなメソッドを利用したプログラムは、version 3.0.9 で圧縮した全てのアプリが動作しません。
圧縮後のアプリが動かない不具合 (KBSC0015) 2005/03/15
- 対象 :
- ALL
- 症状 :
- 圧縮後のアプリをエミュレータや実機で動作させると、APIへのアクセス権限がない趣旨のエラーメッセージが出力されて止まる。
エラーメッセージ例:Cannot access class com/nttdocomo/???/??? from ??? - 原因 :
- 圧縮機能のうち、デフォルトで動作するクラス名短縮機能は、全てのクラスについてパッケージの削除も同時に行っています。したがって、ライブラリのパッケージ名に依存したアプリを圧縮すると、アクセス権限のあったアクセスが、アクセス権限のないクラスになります。
- 解決 :
- ライブラリのパッケージ名に依存したアプリは想定外であったため、現在圧縮はできません。パッケージ名に依存しないプログラムにするか、対応バージョンをお待ちください。
- 詳細 :
-
例を挙げます。
package com.nttdocomo.ui; public class MyButton extends AbstractButton { public MyButton() { } }
この例では、com.nttdocomo.ui.AbstractButton を継承した MyButton クラスを定義しています。
AbstractButton は API リファレンスには存在しませんが、DoJa のライブラリには存在するので、このようなプログラムは書くことができます。
しかし、この AbstractButton クラスはアクセス権限が default (public でない) ため、パッケージを削除するとエラーのでるプログラムとなります。実際、以下のプログラムはコンパイルが通りません。import com.nttdocomo.ui; public class MyButton extends AbstractButton { public MyButton() { } }
クラス融合後の挙動が変わる不具合 (KBSC0014) 2005/03/15
- 対象 :
- 3.0.0 ~
- 症状 :
- クラス融合機能を使用した圧縮を行ったアプリのスレッドに関する挙動が、オリジナルと異なってしまう(最悪の場合、デッドロックしてしまう)。
この不具合は、static synchronized メソッドを持つクラスや、synchronized( ClassName.getClass() ){・・・} という構文(特に Class 型の値に対するsynchronized)を用いた場合に起こります。 - 原因 :
- static synchronized メソッドを持つクラスや、synchronized( ClassName.getClass() ){・・・} という構文を用いるアプリの ClassName にあたるクラスを融合すると、それぞれのクラス (型) に対して取っていたロックが、融合後、同じクラス (型) に対するロックを取ることになります。
- 解決 :
- クラス (型) に対して取っていたロックを、値 (参照) に対するロックに変えるか、もしくはクラス融合機能をオフにして圧縮してください。
- 詳細 :
例を挙げます。
class A{ static synchronized void method1(){ ・・・ } } class B{ static synchronized void method2(){ ・・・ } }
この例では、別のスレッドがそれぞれ method1、method2 を呼び出し、A、B のクラスのロックを取ることができます。
この二つのクラスを融合すると、以下のようになります。
class AB{ static synchronized void method1(){ ・・・ } static synchronized void method2(){ ・・・ } }
融合後のこの例では、別のスレッドがそれぞれ method1、method2 を呼びだすと、AB クラスのロックを取ることができるのが一つのスレッドであるため、挙動が変わります。
synchronized( A.getClass() ){・・・} という構文も、クラス A に対するロックをとることになるため、上記不具合が同様に起こります。
細かい症状としては、運良く何も変わらない場合もありますが、アプリの動作が遅くなったように感じる場合や、最悪デッドロックしてしまう可能性もあります。
逆に上記のようなクラス (型) にたいするロックを取らない場合は、上記不具合はおこらないため、安心してクラス融合をご使用ください。
プリベリファイ中に圧縮に失敗する不具合 (KBSC0013) 2004/12/16
- 対象 :
- 3.0.0 ~ 3.0.3
- 症状 :
- プリベリファイ中に圧縮に失敗した旨のエラーが表示されます。
- 原因 :
- クラス融合の結果、 final メソッドを override してしまうことがあったため。
- 解決 :
- 3.0.4 以降のバージョンを使用してください。
圧縮処理が異常終了することがある不具合 (KBSC0012) 2004/12/16
- 対象 :
- 3.0.0 ~ 3.0.2
- 症状 :
- 圧縮処理中に圧縮に失敗した旨のエラーが表示されます。
- 原因 :
- 未対応のJava属性があったため。
- 解決 :
- 3.0.3 以降のバージョンをご使用ください。
- 詳細 :
- Deprecated属性(非推奨であることを示す属性)がクラス、フィールド、メソッドにある場合、圧縮処理中に、不明な属性として例外が発生されていました。
圧縮後のアプリが動作しない可能性がある不具合 (KBSC0011) 2004/12/16
- 対象 :
- 3.0.0 ~ 3.0.2
- 症状 :
- 圧縮後のアプリが、一部の携帯実機上で、エラーを出し終了する。
- 原因 :
- クラス融合機能により、一部の携帯実機上では正常に動作しないコードを生成するため。
- 解決 :
- 3.0.3 以降のバージョンをご使用ください。
- 詳細 :
- クラス融合機能により、抽象クラスとそうでないクラスが融合されることがありました。結果、抽象クラスのインスタンスを生成するコードが発生します。
圧縮後のアプリが携帯実機上で起動しない可能性がある不具合 (KBSC0010) 2004/09/09
- 対象 :
- 3.0.0 ~ 3.0.1
- 症状 :
- 圧縮後のアプリが、一部の携帯実機上で、エラーを出し終了する。
- 原因 :
- クラス融合機能により、一部の携帯実機上では正常に動作しないコードを生成するため。
- 解決 :
- 3.0.2 以降のバージョンをご使用ください。
- 詳細 :
-
DoJa の仕様では、アプリクラス (IApplication, MApplicationを継承するクラス) は、インスタンス生成をしてはいけません。
バージョン 3.0.0, 3.0.1 に実装されているクラス融合機能では、アプリクラスとその他のクラスを融合することにより、その他のクラスのインスタンス生成コードが、アプリクラスのインスタンス生成コードに置き換わります。
一部の携帯実機上では、このコードを実行するとエラーを出力し終了するように設計されているようです。
圧縮処理前の認証に失敗する不具合 (KBSC0009) 2004/08/19
- 対象 :
- トライアル版
- 症状 :
- 圧縮ボタンを押すと、javaext.exeファイルが存在しない旨のエラーが表示され、圧縮作業が中断されます。
- 原因 :
- SophiaCompressのあるフォルダの絶対パス中にスペースがあると発生します。
- 解決 :
- SophiaCompressのトライアル版は、絶対パス中にスペースを含まない場所に置いて使用してください。
プリベリファイ中に圧縮に失敗する不具合 (KBSC0008) 2003/10/21
- 対象 :
- ~ 3.0.0
- 症状 :
- 圧縮処理中もしくはプリベリファイ中に圧縮に失敗した旨のエラーが表示されます。
- 原因 :
- プリベリファイヤーの仕様です。
- 解決 :
- SophiaCompress 3.0.1 以降を使用してください。
- 詳細 :
クラス変数名やメソッド名に " ・" を含む文字列を使用すると、プリベリファイに失敗します。
SophiaCompressの名前共有機能によって、プログラム中に " ・" を含む文字列があると、その文字列を変数名やメソッド名として使用してしまうことがあります。
圧縮処理中もしくはプリベリファイ中に圧縮に失敗する不具合 (KBSC0007) 2004/08/19
- 対象 :
- ~ 2.3.0
- 症状 :
- 圧縮処理中もしくはプリベリファイ中に圧縮に失敗した旨のエラーが表示されます。
- 原因 :
- SophiaCompress のバグです。
- 解決 :
- SophiaCompress 2.3.1 以降を使用してください。
- 詳細 :
- RetroGuard などのオブファスケータを使用したアプリを SophiaCompress で圧縮する場合に、この不具合の発生率が高まります。
一つの JAR ファイル内にアプリが複数ある場合、圧縮に失敗する不具合 (KBSC0006)2003/09/17
- 対象 :
- ~ 2.2.X
- 症状 :
- 一つの JAR ファイル内に複数のアプリが存在する場合、圧縮に失敗します。
- 原因 :
- SophiaCompress のバグです。
- 解決 :
- SophiaCompress 2.3.0 以降を使用してください。
JAD ファイル内に一行が 72 バイト以上になる行が存在する場合、圧縮に失敗する不具合 (KBSC0005) 2003/09/17
- 対象 :
- ~ 2.2.X
- 症状 :
- 一行が72バイト以上になる行を含む JAD ファイルを持ったアプリを圧縮すると圧縮に失敗します。
- 原因 :
- SophiaCompress のバグです。
- 解決 :
- SophiaCompress 2.3.0 以降を使用してください。
JAM ファイル内のアプリ名などに絵文字を使用した場合、圧縮に失敗する不具合 (KBSC0004) 2003/09/17
- 対象 :
- ~ 2.4.3
- 症状 :
- JAM ファイル内に絵文字を使用したアプリを圧縮すると、圧縮後の JAM ファイルが文字化けするか、もしくは圧縮が失敗します。
- 原因 :
- SophiaCompress には Doja 独自の文字エンコーディングをできるライブラリが含まれていないためです。
- 解決 :
- 絵文字を使用したアプリを圧縮する場合は、圧縮を行う前に JAM ファイル内の絵文字を削除し、圧縮後に絵文字を手動で付け加えてください。
[圧縮] ボタンを押しても圧縮が開始されない不具合 (KBSC0003) 2003/09/17
- 対象 :
- 2.X.X
- 症状 :
- [圧縮] ボタンやその他のボタンを押しても反応がなく圧縮を開始できません。
- 原因 :
- Java 2 SDK 1.4.1_03 を使用して SophiaCompress を起動させた環境下では、SophiaCompress のボタンを押しても反応しなくなる不具合が報告されています。現在、原因を調査中です。
- 解決 :
- Java 2 SDK 1.3.1 を使用して SophiaCompress を起動してください。
SophiaCompress のウィンドウのサイズが異常になる不具合 (KBSC0002) 2003/09/17
- 対象 :
- 2.X.X
- 症状 :
- SophiaCompress のウィンドウのサイズが異常なサイズになります。例えば、ウィンドウが小さすぎてボタンを操作できなくなります。
- 原因 :
- ほとんどの環境ではこのような不具合は確認されていませんが、マルチディスプレイを使用している環境下などでは稀に発生することが確認されています。現在、原因を調査中です。
- 解決 :
コマンドラインより [-resize] オプションを指定して SophiaCompress を起動していただくことでウィンドウのサイズを任意に変更できるようになります。
例:[java -jar scompress.jar -resize] と入力して起動します。
コマンドラインからの起動方法の詳細につきましては、FQSC0005 を参照してください。
iKey ドライバのインストールに失敗する不具合 (KBSC0001) 2003/09/17
- 対象 :
- 2.2.0
- 症状 :
- Windows 2000 Professional の Q814033 パッチがインストールされている環境下でiKey ドライバのインストールに失敗する。
- 原因 :
- Windows 2000 Professional の Q814033 パッチが原因になっていることがあります。
- 解決 :
以下の手順に沿って作業を行ってください。
- Windows 2000 Professional に Q814033 パッチがあたっていることを確認します。
- コントロールパネルの [アプリケーションの追加と削除] を実行し、[Windows 2000 ホットフィックス (sp4) Q814033] という項目が存在することを確認します。
- もし項目が存在しない場合、弊社までご連絡ください。
- [変更と削除] ボタンから Q814033 パッチをアンインストールします。
- マシンを再起動します。
- iKey ドライバをインストールします。
- iKey ドライバのインストールに関しましては iKey ドライバ付属のマニュアルを参照してください。
- Q814033 パッチを再インストールします。
- [スタート] メニューより [Windows Update] を実行するか、ブラウザを使用して Microsoft 社の Windows Update のサイトに接続し、Q814033 パッチをインストールします。
- 詳細 :
Windows 2000 Professional の Q814033 パッチは Microsoft 社が 2003/03/12 にリリースしたものです。このパッチは Windows Web サイトからドライバの更新をインストールできないことがある現象に対処するためのものです。
iKey ドライバのインストールが失敗する原因は、Q814033 パッチが INF データ作成時の問題を修正するために INF の操作方法を若干変更したことに起因します。iKey ドライバはインストール中に Card Service と呼ばれる Windows の標準インターフェースを確認および作成します。この部分の処理で何らかの不具合が発生するためインストールに失敗するものと思われます。
Windows XP においても同様の問題が確認されており、Windows 2000 Professional と同様の方法で対処できることを確認しています。