Topic: 线程问题

  Print this page

1.线程问题 Copy to clipboard
Posted by: ballfly
Posted on: 2005-10-10 14:14

//实现双线程,分别从坐标(0,0)(0,50)画到(100,0)(100,50),能编译但无显示

import java.applet.*;
import java.awt.*;
public class Abc extends Applet implements Runnable
{
Thread th1;
Thread th2;
int parsetime;
int y;
public Abc(int a,int b)
{parsetime=a;y=b;}
public void start()
{
th1=new Thread(new Abc(1000,0));
th1.start();
th2=new Thread(new Abc(2000,50));
th2.start();
}
public void run()
{
repaint();
}
public void paint(Graphics g)
{
try
{
for(int a=0;a<=100;a++)
{g.drawLine(a,y,a+1,y);
th1.sleep(parsetime);}
}
catch(InterruptedException e){}
}
}

2.Re:线程问题 [Re: ballfly] Copy to clipboard
Posted by: snowbug
Posted on: 2005-10-11 00:38

paint() 应当很快就返回,但是你的代码里要等 100 秒或是 200 秒才能执行完。

基本上,程序的设计思想不正确。画两条线不需要用两个单独的线程。你是想要写一个同时画两条线的 applet 吧?其实很简单,开一个线程,每次循环把 x 坐标值加一并调用 applet.repaint() 方法,然后再 sleep(1000) 就行了。

3.Re:线程问题 [Re: ballfly] Copy to clipboard
Posted by: ballfly
Posted on: 2005-10-11 10:47

我是要同时画两条线,一条是sleep(1000),一条是sleep(2000),如何实现?

4.Re:线程问题 [Re: ballfly] Copy to clipboard
Posted by: snowbug
Posted on: 2005-10-13 23:24

ballfly wrote:
我是要同时画两条线,一条是sleep(1000),一条是sleep(2000),如何实现?

上面可能说得不清楚 “开一个线程,每次循环把 x 坐标值加一并调用 applet.repaint() 方法,然后再 sleep(1000) 就行了。”

如果两条线画的速度不同,那么只要每次循环时两个 x 的当前坐标增加量为不同即可,这个在那个单开的线程里完成。在 applet.paint() 方法里每次都是画两条从起点到当前坐标的线,而不用去管如何递增 x 坐标值。

5.Re:线程问题 [Re: ballfly] Copy to clipboard
Posted by: ballfly
Posted on: 2005-10-14 12:10

回楼上,我要最终的X的坐标相同,即画出来的两条线段长度要相同并且头尾的X坐标要一样。请问如何实现,如可以给出写法。(我觉得只有设置等待时间才可以,但不会写法)

6.Re:线程问题 [Re: ballfly] Copy to clipboard
Posted by: cxp108
Posted on: 2005-10-19 08:55

思路不对

应该是单线程,但两个X坐标的递增量不同才对

7.Re:线程问题 [Re: ballfly] Copy to clipboard
Posted by: TellMe
Posted on: 2005-10-26 20:21

楼上的对啊。没有必要多线程。只是增量的问题啊

8.Re:线程问题 [Re: ballfly] Copy to clipboard
Posted by: jasonwjq
Posted on: 2005-11-12 17:14

是因为没理解paint()及java图像处理的原理
应该在一个线程内改变坐标值,而在piaint()内只是画当时内一刻的点或者图像。
例如:
paint(Graphics g) {
g.drawImage(img, curentX, curentY, this);
}

9.Re:线程问题 [Re: ballfly] Copy to clipboard
Posted by: jasonwjq
Posted on: 2005-11-12 17:40

是因为没理解paint()及java图像处理的原理
应该在一个线程内改变坐标值,而在piaint()内只是画当时内一刻的点或者图像。
例如:
paint(Graphics g) {
g.drawImage(img, curentX, curentY, this);
}

10.Re:线程问题 [Re: ballfly] Copy to clipboard
Posted by: oliver456
Posted on: 2005-11-19 11:55

to ballfly
你的这个程序运行好没,我也需要这样的程序
谢谢


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923