java如何实现多线程绘图

假如我要实现电子时钟,clockextendsJPanel……frame.add(clock);frame.setVisible(true);现在frame会调用pain... 假如我要实现电子时钟,
clock extends JPanel
……
frame.add(clock);
frame.setVisible(true);
现在frame会调用paint方法,而paint方法是单线程的,所以必须要让clock的时分秒各起一个线程。 但如何让clock在调用paint方法时,触发时分秒线程的start方法?
展开
 我来答
Stale331x
推荐于2016-04-11 · TA获得超过1299个赞
知道小有建树答主
回答量:1276
采纳率:33%
帮助的人:829万
展开全部
首先,如果你只是要实现电子时钟,根本就不需要用到多线程。
如果你真的是要使用,就新建一个类,实现Runnable接口就是了。
如:
class MyThread1 implements Runnable{
public MyThread(){
}
public void run(){
}
}

使用的时候,就:
Thread myThread=new Thread(new MyThread());
myThread.start();

如果要画图,你就直接把组件通过构造方法传到MyThread中就是了
更多追问追答
追问
不用线程怎么做?
追答
你为什么要使用线程呢? try{ Thread.sleep(1000);}catch(Exception ex){System.exit(0);}  然后你再在这里的后面更新你的显示不就可以了吗?
13580130414
2012-12-07
知道答主
回答量:15
采纳率:0%
帮助的人:14.8万
展开全部
你单线程就可以实现啦,你直接在paint函数中根据他们的规律以变量的形式画出三个指针,然后再用线程中的run()中实现每一秒钟重画一次如
public void run(){
while(true){
Thread.sleep(1000);
frame.repaint();
}
}
这样就可以了,我之前刚好也做过,初学者,如果有需要,我可以把我做的源代码给你。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
FPGA魔法学院
2015-09-01 · TA获得超过193个赞
知道小有建树答主
回答量:213
采纳率:100%
帮助的人:44.1万
展开全部
java中多线程的实现方式有两种,一种是继承java.lang.Thread类,另一种是实现java.lang.Runnable接口。
下面是两种方式的简单代码。
继承Thread类方式:import java.lang.Thread; //用集成Thread类方式实现多线程。 public class Test{ public static void main(String arg[]){ T t1=new T(); T t2=new T(); //更改新线程名称 t1.setName("t1"); t2.setName("t2"); //启动线程 t1.start(); t2.start(); } } class T extends Thread{ //重写run()方法 public void run(){ System.out.println(this.getName()); } }输出结果为:t1t2实现Runnable接口方式:在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例。import java.lang.*; //用实现Runnable接口的方式实现多线程。 public class Test{ public static void main(String arg[]){ T t1=new T(); T t2=new T(); //一定要实例化Thread对象,将实现Runnable接口的对象作为参数传入。 Thread th1=new Thread(t1,"t1"); Thread th2=new Thread(t2,"t2"); //启动线程 th1.start(); th2.start(); } } class T implements Runnable{ //重写run()方法 public void run(){ System.out.println(Thread.currentThread().getName()); } }输出结果为:t1t2public void run()方法是JAVA中线程的执行体方法,所有线程的操作都是从run方法开始,有点类似于main()方法,即主线程。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
幻之谁愚
2015-10-18 · TA获得超过4.4万个赞
知道大有可为答主
回答量:1.2万
采纳率:77%
帮助的人:900万
展开全部
例如,同时画两个图形;
import java.awt.Graphics;
import <a href="https://www.baidu.com/s?wd=java.awt.Color&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1YLuHIBnjDzmW6vrHTYnW9b0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6K1TL0qnfK1TL0z5HD0IgF_5y9YIZ0lQzqlpA-bmyt8mh7GuZR8mvqVQL7dugPYpyq8Q1f1nHbvrHRsPHDvPW6LPjnvP0" target="_blank" class="baidu-highlight">java.awt.Color</a>;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;

public class JFrameDraw2 extends JFrame{
public JFrameDraw2(){
super("Java画图程序");
setSize(600,500); //设置窗口尺寸
setVisible(true); //设置窗口为可视
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口时退出程序
addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
JFrameDraw2.this.repaint();
}
});
}

java.util.Random rnd = new java.util.Random();
public void paint(Graphics g){
super.paint(g);
int x1=150, y1=200, x2=60, y2=60;
for(int i=0; i<20; i++){
int ir=rnd.nextInt(0xff);
int ig=rnd.nextInt(0xff);
int ib=rnd.nextInt(0xff);
g.setColor(new Color(ir,ig,ib));
g.drawRect(x1, y1, x2, y2);
g.drawOval(x1+260, y1, x2, y2);
try{Thread.sleep(100);}catch(Exception eex){}
x1-=5;
y1-=5;
x2+=10;
y2+=10;

}
}

public static void main(String[] args){
new JFrameDraw2();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友12ee0fd
推荐于2018-03-13 · TA获得超过4.7万个赞
知道大有可为答主
回答量:1.1万
采纳率:66%
帮助的人:2317万
展开全部
使用javax.swing.Timer类
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式