当前位置:  技术问答>java相关

关于多线程,急急急!

    来源: 互联网  发布时间:2015-11-09

    本文导语:  如何在一个canvas上通过两个独立的线程画两个不断闪烁的圆。 给出关键部分代码 | import javax.swing.*; import javax.swing.border.EtchedBorder; import java.awt.*; import java.awt.event.*; interface MyInitScheme { void...

如何在一个canvas上通过两个独立的线程画两个不断闪烁的圆。
给出关键部分代码

|
import javax.swing.*;
import javax.swing.border.EtchedBorder;
import java.awt.*;
import java.awt.event.*;

interface MyInitScheme {
void initVarient();
void initFace();
}
class MyMenu extends JMenu implements MyInitScheme {
public MyMenu(String text) {
super(text);
initVarient();
initFace();
}
public void initFace() {
setBackground(SystemColor.desktop);
setFont(new Font("Serif", 0, 16));
setForeground(SystemColor.info);
setBorder(BorderFactory.createEtchedBorder());
}
public void initVarient(){};
}
class MyMenuItem extends JMenuItem implements MyInitScheme {
public MyMenuItem(String text) {
super(text);
initVarient();
initFace();
}
public void initFace() {
setBackground(SystemColor.desktop);
setFont(new Font("Serif", 0, 16));
setForeground(SystemColor.info);
setBorder(BorderFactory.createEtchedBorder());
}
public void initVarient(){};
}

class MyThread extends Thread {
private Component p;
private boolean stop=false;

public void run() {
while(!stop) {
try {
sleep(200);
} catch (InterruptedException e) {
System.out.println(e);
}
p.repaint();
}
}
public void stopThread() {
stop=true;
}
public void start() {
stop=false;
super.start();
}

public MyThread(Component cp) {
p=cp;
}
}
class MyFrame extends JFrame implements MyInitScheme {
class MyContent extends JPanel {
int x=10,y=10,r=30;

public void paintComponent(Graphics g) {
super.paintComponent(g);
java.util.Random rand=new java.util.Random();
r=10+rand.nextInt(90);
g.drawOval(x, y, r, r);
}
public MyContent() {
setBackground(SystemColor.activeCaption);
}
}
JPanel p1=new MyContent();
JPanel p2=new MyContent();
private JMenuBar mnuBar = new JMenuBar();
private JMenu mnuFile = new MyMenu("File");
private JMenuItem mnuFileExit = new MyMenuItem("Exit");
private JMenu mnuHelp = new MyMenu("Help");
private JMenuItem mnuHelpContact = new MyMenuItem("Contact Me");

public void initVarient() {};
public void initFace() {
this.setSize(new Dimension(320, 240));
this.setResizable(false);
getContentPane().setLayout(null);
getContentPane().setBackground(SystemColor.activeCaption);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

mnuBar.setBackground(SystemColor.desktop);
mnuBar.setBorder(BorderFactory.createRaisedBevelBorder());

mnuFile.setMnemonic('F');
mnuFileExit.setMnemonic('x');
mnuFileExit.addActionListener(new ActionListener () {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
} );

mnuHelp.setMnemonic('H');
mnuHelpContact.setMnemonic('M');
mnuHelpContact.addActionListener(new ActionListener () {
public void actionPerformed(ActionEvent e) {
try {
Process p=Runtime.getRuntime().exec("C:/Program Files/"
+"Internet Explorer/IExplore.EXE"
+" mailto:zhangjiawang0809@sohu.com");
} catch (Exception ex) {
System.out.println(ex);
}
}
} );


mnuFile.add(mnuFileExit);
mnuHelp.add(mnuHelpContact);
mnuBar.add(mnuFile);
mnuBar.add(mnuHelp);

this.setJMenuBar(mnuBar);
p1.setBounds(new Rectangle(0,0,150,180));
p2.setBounds(new Rectangle(160,0,150,180));
getContentPane().add(p1);
getContentPane().add(p2);
}

public MyFrame(String title) {
super(title);
initVarient();
initFace();
show();
}
}
public class ThreadApp {
public static void main(String[] args) {
MyFrame frame=new MyFrame("Test Threads");
final MyThread t1=new MyThread(frame.p1);
final MyThread t2=new MyThread(frame.p2);
frame.getContentPane().addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
t1.stopThread();
t2.stopThread();
}
});
t1.start();
t2.start();
}
}

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Java中多线程相关类Thread介绍
  • 一个进程创建了两个线程,如何使得当任何一个线程(比如线程a)结束时,同时也结束线程b,也就是使两个线程一起死掉,怎么办呢?
  • c#多线程更新窗口(winform)GUI的数据
  • java 线程,对当前线程(非主线程)调用sleep,为什么主线程(窗口)也没反应了
  • Windows和Linux下C++类成员方法作为线程函数方法介绍
  • 如何实现一个线程组内多线程的非同不执行,即一个线程执行完毕后再执行下一个线程???
  • c++的boost库多线程(Thread)编程(线程操作,互斥体mutex,条件变量)详解
  • 请问:进程创建的线程是怎样运行的啊,线程的处理函数运行完了,线程就退出了吗?
  • Linux下GCC内置原子操作函数(多线程资源访问)介绍
  • 关于线程的问题,什么样的线程不是active线程?
  • 请问Linux核心支持多线程吗?开发库有线程库吗?线程好用吗?(稳定?)
  • 请问,在一个进程中创建多线程时如何能避免不同的线程获得同一个线程标识
  • 我的一个多线程服务里, 总是有一个线程莫名其妙的变成僵尸线程。
  • 能否通过线程id控制线程的状态?或是观察到线程的状态?
  • 如何在一个线程中启动另外一个线程,然后本线程就退出?
  • 我要设置一个线程的优先级, 这个属性结构并没有线程的id,它怎么知道是设置哪个线程呢?
  • 请问在java多线程中,是只有run(){}内的代码运行在一个新线程下呢?还是这个类中的代码都运行在一个新线程下?
  • gcc链接的库,分不分单线程版本的和多线程版本的?
  • 内核栈~ 内核线程 ~用户线程 之间关系 问题
  • 子线程的数据如何返回给主线程?
  • 如果父线程死掉 那么子线程会不会死掉呢


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3