性格悪い人が優勝

古いですがJavaScript第5版を中古で買ってサンプルスクリプトを順に実行しています。
22.7.1 Javaによる円グラフの最初のコードでつまずきました。

次に私が書き写したサンプルコードを貼り付けます。
例22-14 クライアントサイドでの描画を行うためのJava Canvasアプレット
import java.applet.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;

/**
* この単純なアプレットは、これ自身では何もしない。クライアントサイド
* JavaScriptコードから利用できるようにAPIをエクスポートするだけ。
*/
public class Canvas extends Applet {
BufferedImage image; // このオフスクリーン画像に対して描画する。
Graphics2D g; // このグラフィックコンテキストを利用する。

// ブラウザがこのメソッドを呼び出してアプレットを初期化する。
public void init() {
// アプレットの大きさを調べて、その大きさのオフスクリーン
// 画像を作成する。
int w = getWidth();
int h = getHeight();
image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
// 画像描画用のグラフィックコンテキストを取得する。
g = image.createGraphics();
// 真っ白な背景色から始める。
g.setPaint(Color.WHITE);
g.fillRect(0, 0, w, h);
// アンチエイリアスを有効にする。
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
}

// アプレットの再描画が必要なときに、ブラウザがこのメソッドを自動的
// に呼び出す。オフスクリーン画像をオンスクリーンにコピーする。
// JavaScriptコードから再描画させたい場合は、このメソッドではなく、
// このメソッドを継承したrepaint()メソッドを呼び出す。
public void paint(Graphics g) { g.drawImage(image, 0, 0, this); }

// 以下のメソッドは、基本的な描画パラメータを設定する。
// これはほんの一部で、Java2D APIはもっと多くのパラメータをサポートする。
public void setLineWidth(float w) { g.setStroke(new BasicStroke(w)); }
public void setColor(int color) { g.setPaint(new Color(color)); }
public void setFont(String fontfamily, int pointsize) {
g.setFont(new Font(fontfamily, Font.PLAIN, pointsize));
}

// 以下のメソッドは基本的な描画API。
public void fillRect(int x, int y, int w, int h) { g.fillRect(x,y,w,h); }
public void drawRect(int x, int y, int w, int h) { g.drawRect(x,y,w,h); }
public void drawString(String s, int x, int y) { g.drawString(s, x, y); }

// 以下のメソッドは、任意の図形を塗りつぶしたり、描画したりする。
public void fill(Shape shape) { g.fill(shape); }
public void draw(Shape shape) { g.draw(shape); }

// 以下のメソッドは、単純なShapeオブジェクトを返す。
// これは単なる例で、Java2D APIはもっと多くのAPIをサポートする。
public Shape createRectangle(double x, double y, double w, double h) {
return new Rectangle2D.Double(x, y, w, h);
}
public Shape createEllipse(double x, double y, double w, double h) {
return new Ellipse2D.Double(x, y, w, h);
}
public Shape createWedge(double x, double y, double w, double h,
double start, double extent) {
return new Arc2D.Double(x, y, w, h, start, extent, Arc2D.PIE);
}
}

コンパイルされたCanvas.classをHTMLファイルに埋め込み、スクリプトから制御するサンプルコード
<head>
<script>
window.onload = function() {
var canvas = document.getElementById('square');
canvas.setColor(0x0000ff); // 色を整数で指定することに注意。
canvas.fillRect(0,0,10,10);
canvas.repaint();

canvas = document.getElementById('circle');
canvas.setColor(0xff0000);
canvas.fill(canvas.createEllipse(0,0,10,10));
canvas.repaint();
};
</script>
</head>
<body>
This is a blue square:
<applet id="square" code="Canvas.class" width=10 height=10></applet>
This is a red circle:
<applet id="circle" code="Canvas.class" width=10 height=10></applet>
</body>

これを実行すると、5行目のcanvas.setColor(0x0000ff);のところで、
オブジェクトは 'setColor' プロパティまたはメソッドをサポートしていません。
となって停止してしまいます。
どんな原因が考えられますか。

A 回答 (2件)

Javaの著作権を持つOracle社は、2017年9月22日にリリースされたJava 9でJavaアプレットを非推奨にし、Java 11[1]では廃止することを2016年1月27日に発表しました。


セキュリティ上の問題から、Javaアプレットだけではなく、FlashやSilverlightも廃止される予定です。
JavaScriptとHTML5にその座を譲ったのですね。

そのため、FirefoxやIEなどのブラウザでJavaアプレットが動作しない設定になっていることがあります。また、JavaVMが搭載されていないということもあるようです。

以下のWikiなどごらんください。

https://ja.wikipedia.org/wiki/Java%E3%82%A2%E3%8 …
    • good
    • 0
この回答へのお礼

そういうことだったのですね。
JavaScriptの書籍が格安で手に入って喜んでいたのですが、あまり古い書籍を買うのはよろしくありませんね。
奇跡的にFirefox3の環境があったので、これで実行したところ、見事に動きました。

当方JavaScriptの学習のために、この書籍を買ったのですが、まさにJavaが出てきたりFlashが出てきたり、いろいろ学習すべきものが増えてうんざりしていたところでした。
これらが廃止される予定ということは、私にとってはJavaScriptの学習に集中できるので好都合です。

お礼日時:2019/09/28 16:50

>>私にとってはJavaScriptの学習に集中できるので好都合です。



古い専門書は、値段が安いけど注意しないと、使われなくなった技術の勉強をすることになりますからね。
なお、JavaScriptを学ぶときは、同時にHTML/CSSとかフレームワークのjQueryやBootStrapの専門書も入手して学ばないと、参考ソースを読むとき「これ何だろう???」と悩むことになりますので、ご注意ください。
    • good
    • 0
この回答へのお礼

安さを取るか、新しさを取るか、それが問題ですね。
しかし定価4200円の本が800円で売ってると、やはり飛びついてしまうのです^^
jQueryについては、たびたび目にするようになりましたが、やはり「これ何だろう???」状態です。
ひとまずjQuery等の書籍を買うかどうかは、後で考えるとして、まずはこの古くてもそこそこ詳細なJavaScriptの教材を最後まで読み進めることとします。

お礼日時:2019/09/28 17:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!