• 締切済み

Appletを利用したマルチスレッドプログラミング

現在JavaのAppletを利用したマルチスレッドのプログラミングを行っているのですが、なかなか思うように行きません。 やりたいのは同じクラスを持つインスタンスをそれぞれスレッドで動かし、それぞれ個別に操作を与えたいのです。 例えばこのサイトのページではボール1、ボール2をそれぞれ作成していますが、もう少し汎用化したいのです。 http://www.mm2d.net/applet-howto/howto-07.shtml 例えばAppletで動かすSampleBallクラスのインスタンスを複数作成し、 それぞれスレッドで動かすにはどうすれば良いでしょうか。 別クラス(ファイル)として作成したいです。 イメージとしてはこのような感じなのですが、Main.javaを起動するとAppletが起動しません。 またそれぞれスレッドで動かすということで、任意にAppletにSampleBallクラスのインスタンスを 追加したり、削除したり、操作したりするにはどうすればよいでしょうか。 ・Main.java static void main(String args[]) {   SampleBall ball1 = new SampleBall(・・・);   SampleBall ball2 = new SampleBall(・・・);   SampleBall ball3 = new SampleBall(・・・);   … } ・SampleBall.java public class SampleBall extends Applet implements Runnable{ public SampleBall(…){ ・・・ }    public void changeColor(Color col){・・・}    … } 参考になるページ等も教えて頂ければ助かります。 どうぞよろしくお願いします

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

みんなの回答

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

なんというか Appletをnewするって 実に斬新だわ。

関連するQ&A

  • Runnableのインスタンス化について

    下記のコードについてです。 Runnableがインスタンス化されていますが、 どうしてそれが可能なのかが分かりません。 分からない点は 1.Runnableはインタフェースであるから、本来、直接インスタンス化は不可能であるはず。 2.しかし、Runnableはクラスライブラリjava.langパッケージに含まれている。 だからインスタンス化は可能なのかもしれない。 3.あるいは、下記のコードではメソッド内の無名クラスであるから、「new Runnable(){」の 部分でスーパークラスとしてのRunnableを継承したサブクラスを生成しているのかもしれない。 アドバイスをよろしくお願い致します。 public class Main{ public static void main(String[]args){ Runnable task = new Runnable(){ public void run(){ System.out.println("run"); } }; Thread thread = new Thread(task){ public synchronized void start(){ System.out.println("start"); } }; thread.start(); } }

    • ベストアンサー
    • Java
  • Java applet

    Java appletを使用する課題なのですが、 途中まで書いて、それから止まってしまっています。 アドバイスなど頂ければ嬉しいです。 課題は、 (1)右から左へ動く文字列左から右へ動く文字列とを表示 (2)文字列が消えたらまた出てくるようにする (3)マウスのクリックボタンを押すと止まり、離すと動きだすようにする (2)まで考えたプログラム(コンパイル、実行済)を以下に載せます。 import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class SasakiYui extends Applet implements Runnable{ Thread th = null; Graphics g; int x; public void init(){ setBackground(Color.white); } public void start(){ if(th == null){ th = new Thread(this); th.start(); } } public void run(){ while(!Thread.interrupted()){ for(x=600;x>-300;x=x-5){ repaint(); try{ Thread.sleep(50); } catch(InterruptedException e){} } } } public void paint(Graphics g){ g.drawString("Happy Brithday!",x,10); g.drawString("Happy Birthday!",600-x,40); } } (3)ができるようにするには、 addMouseListener(new Mouseadapter(){ public void mousePressed(MouseEvent e){……} を使用するのだろうとは思うのですが、 ・これを組み込むのはpublic void init(){の後で良いか ・……の部分に何を書けばいいのか の2点がわかりません; よろしければ、アドバイスお願い致します!

    • ベストアンサー
    • Java
  • Javaのサーブレットについて(マルチスレッド)

    サーブレットについて質問です。 サーブレットは1インスタンス・複数スレッドという形態で、 サーブレットコンテナにより管理されていると思います。 では、このコンテナ内では、どのように1インスタンス・複数スレッドを 実現しているのでしょうか? 以下、自分なりに考えたプログラムです。 たぶん、このようにすれば、1インスタンス・複数スレッドになるのかと思うのですが。 どなたかご教授願いますでしょうか。 よろしくお願いいたします。 【1インスタンス・複数スレッドプログラム例】 public class TestThread extends Thread { public void run() { System.out.println("TestThread.run()"); } public static void main(String[] args) { Thread tt = new TestThread(); Thread th1 = new Thread(tt); Thread th2 = new Thread(tt); th1.start(); th2.start(); } }

  • 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アプレットで複数のスレッド (初心者です)

    javaアプレットで二つのスレッドを作り、それぞれからパラパラアニメ(0.4秒間隔で絵が変わるものanime1と0.7秒のものanime2)を表示させたいと考えています。 パラパラアニメ本体はhttp://www.ipc.hokusei.ac.jp/~z00104/java/anim.htmlをほぼコピーで使わせてもらい、それ単体では動かせました。 しかし二つスレッドを作るために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 を指定する必要があります」とエラーが出てしまいます。 色々と調べたり、インスタンスやクラスなど基本的な概念を勉強したりしたつもりなのですが、なぜエラーが出るのか分かりませんでした……。 どなたか解決法を教えていただけませんでしょうか? 初心者な質問で申し訳ないのですが、お力添えいただけると助かります。 不足があれば追記いたしますので、よろしくお願いいたします。

    • ベストアンサー
    • Java
  • コンパイルエラー(Threadオブジェクト化)

    Runnableを継承したNormalClassをThreadとしてオブジェクト化しようとしているのですが、コンパイルエラーが出現して困っています。どうすればいいでしょうか? 下記エラー参照 Main.java:1: NormalClass は abstract でなく、java.lang.Runnable 内の abstract メソッド run() をオーバーライドしません。 下記ソース class NormalClass implements Runnable{ } class Main extends Thread{ public static void main(String args[]){ test = new Thread(new NormalClass()); } }

    • ベストアンサー
    • Java
  • 【java applet】他のクラスを呼び出して図形を描写するには

    はじめまして。 非常に簡単なことで、申し訳ないのですが質問させていただきます。 アプレットをextendsしたAppクラスで 他のMakeImgクラスのインスタンス(mi)を 作成し、MakeImgクラスのペイントメソッドを 実行して、図形を描写したいのですが、 下記のプログラムではコンパイルできても 図形が描写されません。 ペイントメソッドは明示的に呼び出さなくても 呼ばれるはずなので図形を描いてくれてもよさそうなのですが。。。 どなたか詳しい方、同じような問題を経験した方がいらっしゃったらぜひ回答していただければと思います。 それではよろしくお願い致します。 ////////////////////////////////////////////// import java.applet.Applet; import java.awt.*; /* <applet code="App.class" width="300"height="300"> </applet> */ public class App extends Applet {  MakeImg mi;  public void init()  {   mi = new MakeImg();  } } class MakeImg {  public void paint(Graphics g)  {   g.setColor(Color.white);   g.fillRect(0 , 0 , 300 , 300);   g.setColor(Color.black);   g.drawString("test",40,30);  } }

  • Servletとマルチスレッド

    以下のようにServlet側のある部分をマルチスレッドで実装しましたが、まったく速くなりません。Servletはもともとマルチスレッドで動いてるから速くならないのか、それとも自分のソースがおかしいのかわかりません、どなたかおしえていただけますか? public class ***Servlet exends ** { private void hogehoge(){ HogeThread hoge1 = new HogeThread(); Thread th1 = new Thread(hoge, ""); th1.start(); HogeThread hoge2 = new HogeThread(); Thread th2 = new Thread(hoge, ""); th2.start(); } } class HogeThread implements Runnable { public void run() { // hogehoge } }

    • ベストアンサー
    • Java
  • マルチスレッド?

    VC++6.0 コンソールアプリケーションで作成されたプログラムの ある一つのクラスを別スレッドで動かしたいと思っています。 void main () { ~メインの処理~ ClassA clsa; clsa.fnc();←ここを別スレッドで動かしたい ~メインの処理~ } ClassA クラスは閉じたクラスでそこから別のクラスをコールしたりはしません。 なにか参考になるようなサイトなどでもかまいませんので 方法などわかる方は教えてください。

  • Appletのrepaint()が動作しません

    import java.applet.*; import java.awt.*; /*<applet code="zxy" width="1000" height="1000"></applet>*/ class Object extends Applet { protected int x; /* オブジェクトのx座標 */ protected int y; /* オブジェクトのy座標 */ protected int width; protected int height; Image buffer; Graphics buffer_g; Dimension d = getSize(); public Object() { x = 0; y = 0; width = 0; height = 0; } } /* 楕円クラス */ class Oval extends Object implements Runnable { public Oval() { width = (int)(Math.random() * 56 + 10); height = (int)(Math.random() * 56 + 10); } public void run() { while( true ){ try{ repaint(); Thread.sleep(50); } catch( Exception e ){} } } public void paint( Graphics g ) { if( buffer_g == null ) buffer_g = buffer.getGraphics(); Dimension d = getSize(); buffer_g.setColor( Color.white ); buffer_g.fillRect( 0, 0, d.width, d.height ); buffer_g.setColor( Color.black ); buffer_g.drawOval( x, y, width, height ); x += (int)(Math.random() * 10); y += (int)(Math.random() * 10); g.drawImage( buffer, 0, 0, this ); } } public class A extends Applet { Image buffer; Graphics buffer_g; Oval ov1 = new Oval(); Thread thOv1 = new Thread( ov1 ); public void start() { thOv1.start(); Dimension d = getSize(); buffer = createImage( d.width, d.height ); } } 上記プログラムを実行しても、paint()の中が実行されずにtryブロックを繰り返すだけになってしまいます。paint()を実行するにはどうすればいいでしょうか?