αバージョンからβバージョンへの移行
JDKにはαバージョンのプログラムをβバージョン用に変換する
ツール
upgrade
が付いてきています。
javacやappletviewerなどと同じディレクトリにあり、
すぐ使えます。
ただし、これは JDK の中では最も貧弱(手を抜いた?)存在です。
Solaris 用の JDK では sed コマンドを呼び出すわずか 46行の
スクリプトです。(1995年12月現在)
upgrade < OldApp.java > NewApp.java
upgradeは、
古い関数名や変更になったパッケージ名を新しいものに単純に置き換えるだけです。
(それでも使わないよりはましです。)
βバージョンの配布のドキュメントにも記されていますが、
upgrade を通しただけで完全に書き換えができるのは、
ごく単純なアプレットの場合のみです。
「まず upgradeを通し、コンパイルしてエラーが出た箇所を
手で書き直せ。」という、かなり野蛮(?)な方法が推奨されています。大規模なアプレットの変換は大変な作業になりそうですね。 (実際そうです。) 私の経験では、たとえばゲームのようなある程度大きなアプレットの場合には、 コードを忠実に変換することには結局なりませんでした。 βバージョンでは awt コンポーネント を直接活用できるので、 ユーザー・インターフェイスの部分は根本的に書き直した方が効率的です。 Image の取り扱い も、βバージョンでは大きく変わっています。 またセキュリティ上の理由から、 βバージョンでは使用できなくなった機能の部分は、 別の対策を新たに考えて代替の措置を付け加えなければなりません。
以下にαからβで変更になった箇所を項目別にまとめました。
また upgradeが自動的に変換してくれるかも参考のため付けました。
βバージョンから全く新しく追加されたものに関しては、
ここの表の中には含まれていません。
また、クラスそのものの仕様の変化や機能の分化があるので、
この表だけで完璧なわけではありません。
セキュリティのための制限も、
アプレットからの使用が制限されるだけで、
言語自体から関数が削除されたりしたわけではありません。
したがってupgradeはチェックしません。
| αバージョン | βバージョン | upgrade の対応 |
|---|---|---|
| awt.* | java.awt.* | ○ |
| awt.* | java.awt.* | ○ |
| brower.Applet | java.applet.Applet | ○ |
| net.www.* | java.net.* | ○ |
| αバージョン | βバージョン | upgrade の対応 |
|---|---|---|
| getAttribute | getParameter | ○ |
| setForeground | setColor | ○ |
| paint3DRect | fill3DRect draw3Drect |
○ |
| appendChar | append | ○ |
| getFocus | requestFocus | ○ |
| αバージョン | βバージョン | upgrade の対応 |
|---|---|---|
| mouseDown( int, int ) | mouseDown( Event, int, int ) | ○ |
| mouseUp( int, int ) | mouseUp( Event, int, int ) | ○ |
| mouseDrag( int, int ) | mouseDrag( Event, int, int ) | ○ |
| mouseMove( int, int ) | mouseMove( Event, int, int ) | ○ |
| mouseEnter( ) | mouseEnter( Event, int, int ) | △ |
| mouseExit( ) | mouseExit( Event, int, int ) | △ |
| keyDown( int ) | keyDown( Event, int ) | ○ |
| getImage( String ) | getImage( URL ) getImage( URL, String ) |
△ |
| play( String ) | play( URL ) play( URL, String ) |
△ |
| αバージョン | βバージョン | upgrade の対応 |
|---|---|---|
| void mouseDown() | boolean mouseDown() | ×(関数の最後に return文が必須) |
| void mouseUp() | boolean mouseUp() | ×(関数の最後に return文が必須) |
| void mouseDrag() | boolean mouseDrag() | ×(関数の最後に return文が必須) |
| void mouseMove() | boolean mouseMove() | ×(関数の最後に return文が必須) |
| void mouseEnter() | boolean mouseEnter() | ×(関数の最後に return文が必須) |
| void mouseExit() | boolean mouseExit() | ×(関数の最後に return文が必須) |
| void keyDown() | boolean keyDown() | ×(関数の最後に return文が必須) |
| protected void init() | public void init() | × |
| protected void start() | public void start() | × |
| protected void stop() | public void stop() | × |
| αバージョン | βバージョン | upgrade の対応 |
|---|---|---|
| Applet.width | Applet.size().width | ○ |
| Applet.height | Applet.size().height | ○ |
| Applet.font | なくなった | × |
| Font.stringWidth()など | FontMetrics.stringWidth() | × |
| Image.width | Image.getWidth(this) | × |
| Image.height | Image.getHeight(this) | × |
| Thread.sleep(int) | 例外処理が必須 | ○ |