Java には下位互換性があると思っていても、JRE7 を使用して Java 6 アプリケーションを実行すると問題が発生します。
最初の問題:
javax.sound.sampled.Clip は、JRE7 を使用して実行するとまったく機能しませんが、JRE6 を使用して実行すると完全に機能します。
AudioInputStream inputStream = null;
//Try statement
inputStream = AudioSystem.getAudioInputStream(new ByteArrayInputStream(buffer));
clip = AudioSystem.getClip();
clip.open(inputStream);
if (delay > 0) {
Thread.sleep(delay);
}
clip.start();
//catch statement
JR7 では、clip.start(); の後。clip.isRunning() は false を返します。JRE6で実行している場合は発生しません
2番目の問題:
java.util.zip.Inflater を使用して画像ピクセルを圧縮しますが、JRE7 を使用してピクセルを読み取ると、何らかの理由で赤のチャネルが正しく表示されず、理解できませんでした。
おそらく、インフレータが jre6 と jre7 で異なる zip ライブラリ (jre\bin\zip.dll) を使用しているためです。
以下を使用して確認: System.getProperty("java.version"):
Java ランタイム バージョン: 1.6.0_24
サウンドは完璧に機能します
画像は完全に正常に読み込まれます
Java ランタイム バージョン: 1.7.0_21
音が鳴らない(実際はランダムに鳴る)
画像は完全に正常に読み込まれます
Java ランタイム バージョン: 1.7.0-ea
サウンドは完璧に機能します
画像が誤った赤チャンネルで読み込まれます。
簡単なテスト:
両方の Java バージョンでこのコードを使用: http://pastebin.com/WMCfh4Vp
結果:
- JRE-6: 動作します
- JRE-7: 再生されません。クリップが実行されておらず、アクティブでもありません。
この問題を回避する方法はありますか?
ありがとうございました。