在java多线程applet中,所有线程都在同一个对象上绘制

时间:2014-12-21 12:07:40

标签: java string multithreading applet paint

这是我第一次编写java applet;我有我的多线程程序,我必须创建一个显示程序操作的applet;在这一刻,我尝试创建一个非常基本的小程序,简单地说#34;打印每个线程的名称。

我的问题是所有线程都在同一个对象上绘制并覆盖它,我希望每个线程分别编写自己的名称(此时我只能看到最后一个线程的名称)。

我试图创建另一个图形对象但没有工作(我认为不是正确的方法)。

这是我的applet的结构:我创建了一个监听器,它是扩展Applet和实现监听器的接口和响应器,在这里我有init(),paint(图形g)和来自监听器的函数的实现&# 39; s接口,结构是:

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;

public class Responder extends Applet implements Listener {
    public void init(){
        //some initialization

    for(int i=0; i<10; i++){
        TH created = new TH(this);  //this=receiver
        created.start();
    }
}

    String toPrint;
    int pos=0;

    public void paint(Graphics g){
          g.drawString(toPrint, 20, pos);
    }

    @Override
    public void test(String s){
        toPrint=s;
        pos+=10;
        repaint();
    }
}

并且每个线程调用&#34; test&#34;功能

结果是在applet中我只有一个字符串,其名称为最后一个线程。我在网上搜索过,但找不到明确的例子。

有人能以正确的方式向我推荐吗?

谢谢(对不起,如果有英语错误)

修改:Image to be clear

1 个答案:

答案 0 :(得分:0)

你的问题在这里

 for(int i=0; i<10; i++){
    TH created = new TH(this);  //this=receiver
    created.start();
}

您创建了10个不同的线程,并在构造函数中传递相同的applet对象。你需要一些东西:

 for(int i=0; i<10; i++){
    TH created = new TH(new Responder());
    created.start();
}