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方法? 展开
clock extends JPanel
……
frame.add(clock);
frame.setVisible(true);
现在frame会调用paint方法,而paint方法是单线程的,所以必须要让clock的时分秒各起一个线程。 但如何让clock在调用paint方法时,触发时分秒线程的start方法? 展开
6个回答
展开全部
首先,如果你只是要实现电子时钟,根本就不需要用到多线程。
如果你真的是要使用,就新建一个类,实现Runnable接口就是了。
如:
class MyThread1 implements Runnable{
public MyThread(){
}
public void run(){
}
}
使用的时候,就:
Thread myThread=new Thread(new MyThread());
myThread.start();
如果要画图,你就直接把组件通过构造方法传到MyThread中就是了
如果你真的是要使用,就新建一个类,实现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);} 然后你再在这里的后面更新你的显示不就可以了吗?
展开全部
你单线程就可以实现啦,你直接在paint函数中根据他们的规律以变量的形式画出三个指针,然后再用线程中的run()中实现每一秒钟重画一次如
public void run(){
while(true){
Thread.sleep(1000);
frame.repaint();
}
}
这样就可以了,我之前刚好也做过,初学者,如果有需要,我可以把我做的源代码给你。。。
public void run(){
while(true){
Thread.sleep(1000);
frame.repaint();
}
}
这样就可以了,我之前刚好也做过,初学者,如果有需要,我可以把我做的源代码给你。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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()方法,即主线程。
下面是两种方式的简单代码。
继承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()方法,即主线程。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
例如,同时画两个图形;
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();
}
}
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();
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用javax.swing.Timer类
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询