アプリ版:「スタンプのみでお礼する」機能のリリースについて

javaアプレットで二つのスレッドを作り、それぞれからパラパラアニメ(0.4秒間隔で絵が変わるものanime1と0.7秒のものanime2)を表示させたいと考えています。
パラパラアニメ本体はhttp://www.ipc.hokusei.ac.jp/~z00104/java/anim.h …をほぼコピーで使わせてもらい、それ単体では動かせました。

しかし二つスレッドを作るためにRunnableを実装したクラスを二つ用意して、それをまた別の一つのクラスから呼び出すことがうまくできません。

public class oshietegoo extends Applet{
anime1 aa = new anime1();
anime2 bb = new anime2();
Thread a = new Thread(aa);
Thread b = new Thread(bb);
a.start();
b.start();
//(スレッドの作成についてはhttp://www.tohoho-web.com/java/thread.htmを参考にしました)
}
class anime1 extends Applet implements Runnable{
【中身は最初のURLのコピー】
}
class anime2 extends Applet implements Runnable{
【中身は最初URLのコピー】
}

というように書いているのですが、a.start();とb.start();のところで「トークン "start" に構文エラーがあります。このトークンの後には Identifier を指定する必要があります」とエラーが出てしまいます。

色々と調べたり、インスタンスやクラスなど基本的な概念を勉強したりしたつもりなのですが、なぜエラーが出るのか分かりませんでした……。
どなたか解決法を教えていただけませんでしょうか?
初心者な質問で申し訳ないのですが、お力添えいただけると助かります。
不足があれば追記いたしますので、よろしくお願いいたします。

A 回答 (1件)

見たところ、アプレットであるanime1、anime2をnewして動かそうとしていますね。

これが原因でしょう。

アプレットは、newして動かすものではありません。なぜなら、アプレットのインスタンスを作成し実行するのは、それが組み込まれているブラウザの仕事だからです。アプレットのプログラムを書いているなら、作ったアプレットをnewする処理がないことに気づいたはずです。アプレットは、プログラマが自身のプログラム内でnewするのではなく、ブラウザによってページロード時にnewされます。

ですから、アプレット内から別のアプレットをnewして表示するという考え方自体が根本的に間違っています。

表示しているアプレットの中にアニメを表示させたいのであれば、それらはアプレットである必要はありませんね。そのアプレット内に描画の処理を用意しておけばよいだけですから。

また、表示しているアプレットとは別のところにアプレットを新たにはめ込んで表示させたい、というのであれば、これはJavaではなく、ブラウザに表示されているHTML部分の問題です。JavaScriptなどでDOMを操作して実現することになるでしょう。
    • good
    • 0
この回答へのお礼

なるほど!!本当に根本的なことだったのですね、スッキリしました。
普通のJavaとJavaアプレットを同じ感覚でとらえていてはいけませんね。Java自体初めてなのですが、理解があいまいなままアプレットも触り始めているので、変にごっちゃになっているようで恥ずかしいです。

アプレット内に描画の処理を用意する……というのは一度やってみたのですが、0.4秒毎アニメと0.7秒毎アニメを二つ並べて表示するには、sleepをrepaintをどれだけにすればどうすれば……ウワーー!と発狂してこんな凶行に至ってしまいました。
とりあえずもう一度good-failureさんの言葉を思い出しながら作ってみて、難しければ目標を変えるか、また質問するかさせていただきたいと思います。
ずっと悩んでいたので本当にすっきりしました、ありがとうございました!

お礼日時:2012/07/11 16:08

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