Java2Dデモを最新JDKで動かす

Java2DデモというのはJava 5までJDKに添付、Java 8までは別途ダウンロードで提供されていたJava2Dのデモです。

久しぶりに動かそうと思ってJava 5をインストールして、demo/jfc/Java2D/Java2Demo.jarをダブルクリックしてもローディングで止まってました。

Java 5はOracleアーカイブから。
https://www.oracle.com/jp/java/technologies/java-archive-javase5-downloads.html

Java 8向けはこちら。こっちのほうが余計なJDKのインストール不要なのでいいですね。
https://www.oracle.com/java/technologies/java-archive-misc-downloads.html

ソースもあるので開いて動かそうとしてみると、sun.java.image.codecとかの非標準APIが使われていてコンパイル通りませんでした。(Java 8ではImageIOに変わってるので修正不要。DemoImagesの修正だけでいいです)

ということで、java2d.demos.ImagesパッケージのJPEGFlipを編集します。

importコメントアウトして。

//import com.sun.image.codec.jpeg.*;

JPEGCodecを使ってるコードをImageIOに置き換えます。

ByteArrayOutputStream out = new ByteArrayOutputStream();
//JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
//JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
//param.setQuality(1.0f, false);
//encoder.setJPEGEncodeParam(param);
//encoder.encode(bi);
ImageIO.write(bi1, "jpeg", out);

//FileInputStream in = new FileInputStream(file);
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
//JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(in);
//bi1 = decoder.decodeAsBufferedImage();

ところでパッケージ名が大文字始まりなんですよね。違和感

それと、画像リソースの読み込みでこけてローディングが止まるので、java2d.DemoImagesのコードを書き替えます。

// URLClassLoader urlLoader = (URLClassLoader)cmp.getClass().getClassLoader();
// URL fileLoc = urlLoader.findResource("images/" + name);
URL fileLoc = DemoImages.class.getResource("/images/" + name);

これで動くはず。
まあ、書き換えなくてもJava5でそのまま動かせばいいのだけども。