我正在试多线程,定义了一个新的线程类,代码如下
import com.klg.jclass.chart.beans.SimpleChart;
public class DrawThread implements Runnable {
  Thread dt;
  private SimpleChart sc1;
  private String datastr;
 
  public DrawThread() {
    dt=new Thread(this,"Draw Thread");
  }
  public void  begin(SimpleChart  sc, String data){
    this.sc1=sc;
    this.datastr=data;
    dt.start();
  }
  public void run(){
    sc1.setData(datastr);
    System.out.println("drawThread exiting");
   }
}然后调用代码如下
DrawThread myThread=new DrawThread();建立实例,然后
 try{
        Thread.currentThread().sleep(400);
        myThread.begin(simpleChart1,chartdata);
        myThread.dt.join(); }catch(InterruptedException ex){
        System.out.println(ex);
 }
此代码前后都有算法计算,可是这个线程只调用一次,
且simplechart在这一次调用中也没有改变显示!
这是为什么?是线程调用错误?:(

解决方案 »

  1.   

    //由于我不知道你的程序的具体代码,我自己编了一个简单的实例程序
    //不懂得话可以发短消息给我import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class WorkProgressBar extends JFrame
    implements Runnable
    {
    public JProgressBar workCompleteShow;
    public JButton startButton;
    public void run()
    {
    for(int i=1;i<=100;i++)
    {
    try
    {
    Thread.currentThread().sleep(100);
    workCompleteShow.setValue(i);
    }
    catch(InterruptedException e)
    {}
    }
    startButton.setEnabled(true); } private class StartAction 
    implements ActionListener
    {
    public void actionPerformed(ActionEvent event)
    {

    startButton.setEnabled(false);
    Thread workThread=new Thread(WorkProgressBar.this);
    workThread.start();
    }
    } public WorkProgressBar()
    {
    setTitle("进度条实例");
    setSize(400,200);
    JPanel progressBarPanel=new JPanel();
    workCompleteShow=new JProgressBar(0,100);
    progressBarPanel.add(workCompleteShow); JPanel startButtonPanel=new JPanel();
    startButton=new JButton("start work");
    startButton.addActionListener(new StartAction());
    startButtonPanel.add(startButton); Container contentPane=getContentPane();
    contentPane.add(workCompleteShow,BorderLayout.CENTER);
    contentPane.add(startButtonPanel,BorderLayout.SOUTH); } public static void main(String[] args)
    {
    WorkProgressBar frame=new WorkProgressBar();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.show();
    }
    }
      

  2.   

    to cowboy:
    谢谢你给我的那个小例子,但是那个小例子我感觉是不是只用了一个线程,
    并没有让多个线程同时交叉运行?不知道我是不是理解得不好,
    我的qq号是57973839,不知道能不能和你直接交流一下?