JDK1.1.7とJDK1.3.1の違いとは?

このQ&Aのポイント
  • JDK1.1.7とJDK1.3.1の間には、java.awt.Choiceの実装において、select(-1)がエラーを引き起こすかどうかの違いがあります。
  • JDK1.1.7ではselect(-1)はエラーを引き起こしますが、JDK1.3.1ではselect(-1)を許容しています。
  • JDK1.3.1でのjava.awt.Choiceの実装では、select(-1)による未選択状態への設定が可能です。
回答を見る
  • ベストアンサー

JDK1.1.7 と JDK1.3.1 の違い。。。

はじめて質問いたします。 現在、JDK1.1.7 で開発したアプレットがあるのですが、 この中で、java.awt.Choice を未選択状態にする為に select(-1);  としている個所があります。 このアプレットをJavaPlug-in1.3.1 を使用して実行すると、IllegalArgumentException が発生してしまいます。 そこで、1.1.7 と 1.3.1 のソースコードを比べてみると、確かに、1.3.1 では、 select(-1) は認めていないようです。 --- JDK1.1.7 の java.awt.Choice の実装 ---> public void select(int pos) {   if (pos >= pItems.size()) {     throw new IllegalArgumentException("illegal Choice item position: " + pos);   }     :     : } <--- JDK1.1.7 --- --- JDK1.3.1 の java.awt.Choice の実装 ---> public synchronized void select(int pos) {   if ((pos >= pItems.size()) || (pos < 0)) {     <--- 違いはここだけ。。。     throw new IllegalArgumentException("illegal Choice item position: " + pos);   }     :     : } <--- JDK1.3.1 --- う~ん、まさしく、-1 を拒否していますね。 何故、このような実装の違いが出ているのでしょうか? (私的には、Java2開発者の気まぐれなのではと考えてしまいます。。) また、このアプレットを最小限の修正で1.3.1 でも正常に動作するようにしたいの ですが、1.3.1 の java.awt.Choice では未選択状態にする事は不可能なのでしょうか? ご存知の方がおられましたら、是非、お教え頂きたいと思います。 よろしくお願い致します。

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.1

バージョン1.1.xのAPI仕様を見ても、select(-1)で未選択状態に出来るとは書いてないんですよね…… だから1.1.7のselect(-1)で未選択状態に出来たのは、たまたまそうなっていたからとしか言いようがありませんね。 API仕様では、バージョン1.1でも1.3でも例外キャストの条件が「指定された位置が無効な場合」となっていて、具体的な数字が出てこないのでかなりあいまいな表現ですが、それでも引数に-1を渡したら普通は例外になると考えるのが自然です。 いずれにせよ、バージョン1.3のAPI仕様を見る限り、未選択状態に関することは載っていないので、あとから未選択状態になるように仕向けるのはあきらめたほうが良いと思われます。ほかに上のような裏技があったとしても、将来の実装が変更されないとは言い切れません。 提案: 未選択状態にする代わりに、空白の選択項目、あるいはウェブページに良くある「選択してください!」といったような“無効な項目”を作ってはどうでしょう。未選択状態にする目的がかかれてないので、なんともいえませんが。

mrt136
質問者

お礼

>だから1.1.7のselect(-1)で未選択状態に出来たのは、たまたまそうなっていたからとしか言いようがありませんね。 うっ、確かにおっしゃるとおりです。。。 たまたまうまく動いていたからそのままにしておいたと言った感じでしょうか。。。 >提案: 未選択状態にする代わりに、空白の選択項目、あるいはウェブページに良くある「選択してください!」といったような“無効な項目”を作ってはどうでしょう。 そうですね。やっぱりそれしか無いですよね。今後の事も考えると。。。 しかし、数が多いので手間が。。。 ご回答本当にありがとうございました。

関連するQ&A

  • アプレットを実行すると、×が表示され、Javaアプレットの読み込みに失敗しました。のメッセージが表示されます。

    Java JDK5をインストールしました。 C:\Program Files\Javaに jdk1.5.0_06 jre1.5.0_06 がインストールされています。 コンパイルは、PATHにC:\Program Files\Java\jdk1.5.0_06\binを追加すれば、できるようになりました。 Javaアプレットの読み込みに失敗しました。のメッセージが表示されます。 // 図形の表示 import java.applet.*; import java.awt.*; public class Test_0002 extends Applet{ public void paint(Graphics g){ g.fillOval(0, 0, 200, 100); } }

    • ベストアンサー
    • Java
  • Random#nextInt(int n)の実装

    Java 2 (1.4) のドキュメントによれば、java.util.Random#nextInt(int n) の実装は public int nextInt(int n) { if (n<=0) throw new IllegalArgumentException("n must be positive"); if ((n & -n) == n) // i.e., n is a power of 2 return (int)((n * (long)next(31)) >> 31); int bits, val; do { bits = next(31); val = bits % n; } while(bits - val + (n-1) < 0); return val; } となっているようですが、  return (int) (getDouble() * n) ; // もっとも簡単な実装 ではないのは何故ですか。精度上の問題があるのでしょうか?

  • Javaアプレットについてですが

    Javaアプレットでボタンを押したら数字が増えるものを作っているのですがどうもうまく動きません。 ソースは下の通りです。 変更しなければいけないところがあるならお願いします。 import java.applet.Applet; import java.awt.Graphics; import java.awt.Button; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class Sample7 extends Applet implements Runnable, ActionListener { Button bt; int num; public void init() { bt = new Button("開始"); add(bt); bt.addActionListener(this); Thread th; th = new Thread(this); th.start(); } public void actionPerformed(ActionEvent ae) { public void run() { try{ for(int i=0; i<11; i++){ num = i; repaint(); Thread.sleep(1000); } } catch(InterruptedException e){} } } public void paint(Graphics g) { String str = num + "です。"; g.drawString(str, 50, 50); } }

    • ベストアンサー
    • Java
  • Javaプログラムの繋げ方について。

    Javaプログラムの繋げ方について。 今まで(1)のようなプログラムを書いていました。 作りたいものに向けて色々検索するとやりたいものに近い(2)のようなサンプルプログラムを見つけました。 しかし、Java初心者なもので混ぜ方(?)がわかりません。 現在の私の知識からいうと今までのはアプレットでフレーム使うのはアプリケーションなのかな?別物なのかな?そんな感じです。 もし、混ぜることができるなら何かアドバイスをお願いします。 (1)package test; import java.applet.* ; import java.awt.Label ; import java.awt.Font ; import static java.awt.Font.BOLD ; import java.util.*; import java.awt.Graphics; import java.awt.Image; import java.awt.*; public class test extends Applet{ public void paint(Graphics g){ g.setColor(Color.red); g.fillOval(320, 200, 100, 100); } public void init () { ~~~~~~~~~~~~~~~~ } public void start () { ------------ }}} (2)import java.awt.*; import java.awt.event.*; public class MouseEvent7 extends Frame { int posX = 50; int posY = 50; public static void main(String [] args){ new MouseEvent7(); } //コンストラクタ MouseEvent7(){ this.addWindowListener(new WinAdapter()); //ウィンドウリスナーの登録 this.setSize(200,200); this.setVisible(true); //MouseMotionListenerの登録 addMouseMotionListener( new MouseMotionAdapter(){ public void mouseMoved(MouseEvent e){ posX = e.getX(); posY = e.getY(); repaint(); //paintメソッドを実行 } } ); } public void paint(Graphics g){ g.drawOval(posX,posY,50,50); } } (1)の内容に本当に(2)のプログラムで出来るマウスの動きに合わせて円も動く+クリックしたらそこで止まるだけいいのですが。 出来たら止まった点の座標も取りたいですが、そこまではいってません;;

  • javaアプレットの課題について

    大学の授業の課題についてなんですが、 javaアプレットを使って 「徐々に大きな四角形を表示させ、ある程度の大きさの四角形になったらまた最初に戻り、さらにボタンを表示させ、ボタンを押す度に四角形の拡大をストップ、スタートさせるプログラムを作れ。また、マウスでクリックした部分を中心に、徐々に大きな四角形を表示させるようにもするように。」 という、自分でも書いていて分からなくなりそうな内容の課題が出されまして、先生などのアドバイスを頼りに import java.applet; import java.awt.Graphics; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.Color; import java.awt.Button; public class Report1 extends Applet implements ActionListener,Runnable { int x = 10; int y = 10; Button bt; public void init() { addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { x = e.getX(); y = e.getY(); repaint(); } }); { bt.setLabel("pause"); } while{ } if() repaint(); public void paint(Graphics g) { g.setColor(Color, white); g.fillRect(0, 0, 400, 400); } public void update(Graphics g){ paint(); 何とか上のような感じにまではこぎつけたのですが、 ここからは正直どうすればいいのか検討がつかず お手上げ状態なんです... どなたか解答又は参考になるサイトがあれば 教えていただけないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • アプレットでマウスイベントが出ない

    クリックしても反応しません。 また、マウスイベントが発生したときに飛ぶメソッドにSystem.out.printlnを入れるとException in thread "AWT-EventQueue-0" java.lang.NullPointerException: component argument pDataが出ることがあります。 import java.applet.Applet; import java.awt.Graphics; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; public class NewJApplet extends javax.swing.JApplet implements MouseListener{ int x = 10; int y = 10; public void init() { x = 50; y = 50; } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed( MouseEvent e ){ x = e.getX(); // マウスがクリックされた位置のx座標を取得する y = e.getY(); // マウスがクリックされた位置のy座標を取得する repaint(); // アプレットの再描画を指示する } public void mouseReleased(MouseEvent e) { } public void paint(Graphics g) { g.fillOval(x,y,10,10); } } 使ってるのは jre1.6.0_01 NetBeans 5.5です

    • ベストアンサー
    • Java
  • javaアプレットでのy=x^2のグラフ

    javaアプレットでy=x^2のグラフを描写したいのですが、現在の状態ではグラフの右側しか画面に現れません。軸の移動をすればよいと思うのですが、どのように修正すればよいのでしょうか? import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; public class test1 extends Applet{ public void paint(Graphics g){ g.setColor(Color.red); int x,yp=100,xp=0; for(x=0;x<200;x++){ int y=(int)(x*x)*(-1)+100; g.drawLine(xp,yp,x,y); xp = x; yp = y; } } }

  • 直線・曲線描画時の原点の変更

    こんにちは。 大学の課題でJava上で曲線を描く、という物を作っているのですが、 左上原点から左下原点への変更の仕方がよくわかりません。 今は仕方なく、 g.drawLine(150, h-0, 0, h-300); のように、y座標側にh(アプレットの高さ)を入力して行っているのですが、drawLineの記述数が増えるとひとたまりもありません。 Graphicsクラスを拡張する事も考えたのですが、いまいち・・・。 何かいい方法はありますでしょうか?? ソースは ============================================= import java.applet.Applet; import java.awt.Graphics; public class abcd extends Applet { int w,h; //Appletの幅,高さ public void init(){ w = size().width; h = size().height; } public void paint(Graphics g){ g.drawLine(300, h-0, 0, h-150); g.drawLine(150, h-0, 0, h-300); } } ============================================= です。 ちなみにGraphicsクラスを拡張しようとしてよくわからなくなりました。↓↓ ============================================= public class Graphicsc extends java.awt.Graphics { public void drawLine(int arg0, int arg1, int arg2, int arg3) { ????????・・・・ } }

    • ベストアンサー
    • Java
  • Javaアプレットとマルチスレッドの組み合わせ

    Javaアプレットとマルチスレッドを組み合わせてパラパラ漫画のようなものを作りたいのですがうまくいきません。 import java.awt.Graphics; import java.awt.Image; public class kadai4 extends java.applet.Applet implements Runnable{ Image logoImage[]; Thread runner; int current; int last=6; public void init(){ logoImage=new Image[last]; for(int i=0;i<last;i++){ logoImage[i] = getImage(getCodeBase(),"image/logo" + (i+1) + ".gif"); } } public void start(){ if(runner == null){ runner = new Thread(this); runner.start(); } } public void stop(){ if(runner != null){ runner.stop(); runner=null; } } public void run(){ while(true){ for(int i=0;i<last;i++){ current=i; repaint(); pause(400); } } } public void paint(Graphics g){ g.drawImage(logoImage[current],50,25,50,50,this); } void pause(int time){ try { Thread.sleep(time);} catch (InterruptedException e) {} } } これを実行すると推奨されない API を使用またはオーバーライドしています。というエラーが発生するのですがどうすれば良いでしょうか?他の方法でも構いません

    • ベストアンサー
    • Java
  • javaでアプレットの描画が出来ない

    ものすごく初心者な質問で申し訳ありません。 jdk-1.6.0をVine linux 3.2にインストールして使用しています。 javaのソースを書いてコンパイルするなどには問題は無いのですが (今のところ) 以下のようなアプレットを試してみたところアプレットの窓は起動しますが 描画がされません。 import java.applet.Applet; import java.awt.Graphics; /* <applet code="test" width=200 height=200> </applet> */ public class test extends Applet { public void paint(Graphics g) { g.drawLine(10,10,180,110); } } 以上のコードを %javac test.java %appletviewer test.java としました。窓は起動し、アプレットが開始された、と表示されるのですが 線が見当たりません。 (ちなみに教科書にあるサンプルなので間違いがあったとしたら写し間違いです) 線が表示されるはずなんですが、表示されないのです。 まども起動するので何かJAVAを使う環境として何か細かい設定を間違って いるのかと思い質問しました。 分かる方がいらっしゃったら教えてください。

専門家に質問してみよう