本事想写一个用三个按钮控制三个线程画矩形的,可是他们都不工作。
本人刚学java,菜鸟一枚,求各种前辈不吝赐教,在此多谢。//ThreadTest.javaimport java.awt.*;
import javax.swing.*;public class ThreadTest {
public static void main(String[] args)
{
Toolkit tk=Toolkit.getDefaultToolkit();
Dimension screenSize=tk.getScreenSize();
int screenWidth=screenSize.width;
int screenHeight=screenSize.height;
ThreadFrame threadFrame=new ThreadFrame();
threadFrame.setLocation(screenWidth/3, screenHeight/5);
threadFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
threadFrame.setVisible(true);
}
}
//ThreadFrame,javaimport java.awt.*;
import java.awt.event.*;
import javax.swing.*;class ThreadFrame extends JFrame
{
DrawThread draw=new DrawThread(50,50,20,10);
Container contentPane=getContentPane();
JPanel panel1=new JPanel();
JPanel panel2=new JPanel();
JButton button1=new JButton("线程1开始");
JButton button2=new JButton("线程2开始");
JButton button3=new JButton("线程3开始");
public ThreadFrame()
{
setTitle("线程并发执行演示");
setSize(480,480);
panel2.add(button1);
panel2.add(button2);
panel2.add(button3);
repaint();
button1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(draw.start==0)
{
DrawThread draw1=new DrawThread(50,50,20,5);
draw1.start();
draw.start=1;
button1.setText("线程1暂停");
}
else if(draw.start==1)
{
draw.change();
button1.setText("线程1开始");
}
else
{
draw.change();
button1.setText("线程1暂停");
}
}
});
button2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(draw.start==0)
{
DrawThread draw2=new DrawThread(50,50,20,5);
draw2.start();
draw.start=1;
button2.setText("线程2暂停");
}
else if(draw.start==1)
{
draw.change();
button2.setText("线程2开始");
}
else
{
draw.change();
button2.setText("线程2暂停");
}
}
});
button3.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(draw.start==0)
{
DrawThread draw3=new DrawThread(50,50,20,5);
draw3.start();
draw.start=1;
button3.setText("线程3暂停");
}
else if(draw.start==1)
{
draw.change();
button3.setText("线程3开始");
}
else
{
draw.change();
button3.setText("线程3暂停");
}
}
});
contentPane.add(panel1,BorderLayout.NORTH);
contentPane.add(panel2,BorderLayout.SOUTH);
}
public void paintComponent(Graphics g)
{
super.paintComponents(g);
g.drawString("线程1", 10, 50);
g.drawString("线程2", 10, 100);
g.drawString("线程3", 10, 150);
}
class DrawThread extends Thread
{
int x, y,WIDTH,HEIGHT;
int start;
int speed;
DrawThread(int x, int y, int HEIGHT,int speed)
{
this.x = x;
this.y = y;
this.HEIGHT = HEIGHT; //矩形的高
this.speed = speed;
this.start = 0;
} public void drawMe()
{
Graphics g = panel1.getGraphics(); //把画笔给panel1
g.setColor(Color.red);
g.fillRect(x, y,WIDTH,HEIGHT ); //panel1自己在画矩形
} public void change() //改变标志
{
this.start *= -1;
} public void run()
{ while (true) //循环执行
{
this.drawMe(); //panel1画矩形
if (start == 1)
{
if (WIDTH > 400)
{
Graphics g = panel1.getGraphics();
Color c = g.getColor();
g.setColor(Color.white);
g.fillRect(x, y,WIDTH,HEIGHT );
g.setColor(c);
WIDTH = 0;
}
WIDTH += speed;
}
try
{
Thread.sleep(100);
}
catch (Exception e) {}
}
} }
}
本人刚学java,菜鸟一枚,求各种前辈不吝赐教,在此多谢。//ThreadTest.javaimport java.awt.*;
import javax.swing.*;public class ThreadTest {
public static void main(String[] args)
{
Toolkit tk=Toolkit.getDefaultToolkit();
Dimension screenSize=tk.getScreenSize();
int screenWidth=screenSize.width;
int screenHeight=screenSize.height;
ThreadFrame threadFrame=new ThreadFrame();
threadFrame.setLocation(screenWidth/3, screenHeight/5);
threadFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
threadFrame.setVisible(true);
}
}
//ThreadFrame,javaimport java.awt.*;
import java.awt.event.*;
import javax.swing.*;class ThreadFrame extends JFrame
{
DrawThread draw=new DrawThread(50,50,20,10);
Container contentPane=getContentPane();
JPanel panel1=new JPanel();
JPanel panel2=new JPanel();
JButton button1=new JButton("线程1开始");
JButton button2=new JButton("线程2开始");
JButton button3=new JButton("线程3开始");
public ThreadFrame()
{
setTitle("线程并发执行演示");
setSize(480,480);
panel2.add(button1);
panel2.add(button2);
panel2.add(button3);
repaint();
button1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(draw.start==0)
{
DrawThread draw1=new DrawThread(50,50,20,5);
draw1.start();
draw.start=1;
button1.setText("线程1暂停");
}
else if(draw.start==1)
{
draw.change();
button1.setText("线程1开始");
}
else
{
draw.change();
button1.setText("线程1暂停");
}
}
});
button2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(draw.start==0)
{
DrawThread draw2=new DrawThread(50,50,20,5);
draw2.start();
draw.start=1;
button2.setText("线程2暂停");
}
else if(draw.start==1)
{
draw.change();
button2.setText("线程2开始");
}
else
{
draw.change();
button2.setText("线程2暂停");
}
}
});
button3.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(draw.start==0)
{
DrawThread draw3=new DrawThread(50,50,20,5);
draw3.start();
draw.start=1;
button3.setText("线程3暂停");
}
else if(draw.start==1)
{
draw.change();
button3.setText("线程3开始");
}
else
{
draw.change();
button3.setText("线程3暂停");
}
}
});
contentPane.add(panel1,BorderLayout.NORTH);
contentPane.add(panel2,BorderLayout.SOUTH);
}
public void paintComponent(Graphics g)
{
super.paintComponents(g);
g.drawString("线程1", 10, 50);
g.drawString("线程2", 10, 100);
g.drawString("线程3", 10, 150);
}
class DrawThread extends Thread
{
int x, y,WIDTH,HEIGHT;
int start;
int speed;
DrawThread(int x, int y, int HEIGHT,int speed)
{
this.x = x;
this.y = y;
this.HEIGHT = HEIGHT; //矩形的高
this.speed = speed;
this.start = 0;
} public void drawMe()
{
Graphics g = panel1.getGraphics(); //把画笔给panel1
g.setColor(Color.red);
g.fillRect(x, y,WIDTH,HEIGHT ); //panel1自己在画矩形
} public void change() //改变标志
{
this.start *= -1;
} public void run()
{ while (true) //循环执行
{
this.drawMe(); //panel1画矩形
if (start == 1)
{
if (WIDTH > 400)
{
Graphics g = panel1.getGraphics();
Color c = g.getColor();
g.setColor(Color.white);
g.fillRect(x, y,WIDTH,HEIGHT );
g.setColor(c);
WIDTH = 0;
}
WIDTH += speed;
}
try
{
Thread.sleep(100);
}
catch (Exception e) {}
}
} }
}
解决方案 »
- 求一个正则表达式 过滤所有不在<script /script>之间的html注释<!----> 急急 在线等
- 为什么main中的return不能退出程序
- java中如何表示上个月倒数第2天和本月倒数第2天?
- 对应thinking in java的例子,提一个初始化的问题。
- 哪里有Java 核心源代码
- Java , Installanywhere 在 Redhat 上的中文问题解决方法
- 怎样将一个XML文件转换成一个HASHMAP?
- 邮件服务器难做吗?谁有原代码。
- 一个我不懂的数据库访问问题,关于自动编号的获取
- java基本概念的问题
- 急!为什么键盘监听有的时候可以,有的时候失灵?
- 批量导出大量数据Excel
我swing也不是很好,大概帮你看了下,问题有几点
首先,
contentPane.add(panel1, BorderLayout.NORTH);
这个panel1就在界面上面,很小的一块
你可以用panel1.setBackground(Color.red);看看具体是什么样子的
你的它的画笔来画,我不知道会有什么问题第二,
DrawThread这个的WIDTH一直是0,你自己调试看看我改了两句contentPane.add(panel1, BorderLayout.CENTER);drawMe()里面加了WIDTH=30;
现在能够看到一块红的,因为具体不知道你要干什么,
你可以照着改了再调看看
有木有人能帮我实现下。代码我改了一下,可以运行了,但是不能体现cpu的时间转轮调度算法,要让停止的线程释放它所占的资源。import java.awt.*;
import javax.swing.*;public class ThreadTest {
public static void main(String[] args)
{
Toolkit tk=Toolkit.getDefaultToolkit();
Dimension screenSize=tk.getScreenSize();
int screenWidth=screenSize.width;
int screenHeight=screenSize.height;
ThreadFrame threadFrame=new ThreadFrame();
threadFrame.setLocation(screenWidth/3, screenHeight/5);
threadFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
threadFrame.setVisible(true);
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;class ThreadFrame extends JFrame
{
DrawThread draw=new DrawThread(50,50,20,10);
Container contentPane=getContentPane();
JPanel panel1=new JPanel();
JPanel panel2=new JPanel();
JButton button1=new JButton("线程1开始");
JButton button2=new JButton("线程2开始");
JButton button3=new JButton("线程3开始");
public ThreadFrame()
{
setTitle("线程并发执行演示");
setSize(480,480);
panel2.add(button1);
panel2.add(button2);
panel2.add(button3);
repaint();
button1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
DrawThread draw1=new DrawThread(50,50,20,5);
draw1.start();
button1.setText("线程1暂停");
}
});
button2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
DrawThread draw2=new DrawThread(50,150,20,5);
draw2.start();
button2.setText("线程2暂停");
}
});
button3.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
DrawThread draw3=new DrawThread(50,250,20,5);
draw3.start();
button3.setText("线程3暂停");
}
});
contentPane.add(panel1,BorderLayout.CENTER );
contentPane.add(panel2,BorderLayout.SOUTH);
}
public void paintComponent(Graphics g)
{
super.paintComponents(g);
g.drawString("线程1", 10, 50);
g.drawString("线程2", 10, 100);
g.drawString("线程3", 10, 150);
}
class DrawThread extends Thread
{
int x, y,WIDTH=0,HEIGHT;
int start;
int speed;
DrawThread(int x, int y, int HEIGHT,int speed)
{
this.x = x;
this.y = y;
this.HEIGHT = HEIGHT; //矩形的高
this.speed = speed;
this.start = 1;
} public void drawMe()
{
Graphics g = panel1.getGraphics(); //把画笔给panel1
g.setColor(Color.red);
g.fillRect(x, y,WIDTH,HEIGHT ); //panel1自己在画矩形
} public void change() //改变标志
{
this.start *= -1;
} public void run()
{
while (true) //循环执行
{
this.drawMe(); //panel1画矩形
if (start == 1)
{
if (WIDTH > 400)
{
Graphics g = panel1.getGraphics();
Color c = g.getColor();
g.setColor(Color.white);
g.fillRect(x, y,WIDTH,HEIGHT );
g.setColor(c);
WIDTH = 0;
}
WIDTH += speed;
}
try
{
Thread.sleep(100);
}
catch (Exception e) {}
}
} }
}
我之改了第一个按钮class ThreadFrame extends JFrame {
DrawThread draw = new DrawThread(50, 50, 20, 10);
Container contentPane = getContentPane();
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel(); JButton button1 = new JButton("线程1开始");
JButton button2 = new JButton("线程2开始");
JButton button3 = new JButton("线程3开始"); DrawThread draw1;
DrawThread draw2 = new DrawThread(50, 150, 20, 5);
DrawThread draw3 = new DrawThread(50, 250, 20, 5);
public ThreadFrame() {
setTitle("线程并发执行演示");
setSize(480, 480); panel2.add(button1);
panel2.add(button2);
panel2.add(button3); repaint(); button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(draw1 == null){
draw1 = new DrawThread(50, 50, 20, 5);
draw1.start = 1;
draw1.start();
}else{
draw1.change();
if(draw1.start == -1)
try {
draw1.suspend();
} catch (Exception e1) {
e1.printStackTrace();
}
else
draw1.resume();
}
button1.setText("线程1暂停");
}
}); button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
draw2.start();
button2.setText("线程2暂停");
}
}); button3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
draw3.start();
button3.setText("线程3暂停");
}
}); contentPane.add(panel1, BorderLayout.CENTER);
contentPane.add(panel2, BorderLayout.SOUTH);
} public void paintComponent(Graphics g) {
super.paintComponents(g); g.drawString("线程1", 10, 50);
g.drawString("线程2", 10, 100);
g.drawString("线程3", 10, 150);
} class DrawThread extends Thread {
int x, y, WIDTH = 0, HEIGHT;
int start = -1;
int speed; DrawThread(int x, int y, int HEIGHT, int speed) {
this.x = x;
this.y = y;
this.HEIGHT = HEIGHT; // 矩形的高
this.speed = speed;
} public void drawMe() {
Graphics g = panel1.getGraphics(); // 把画笔给panel1
g.setColor(Color.red);
g.fillRect(x, y, WIDTH, HEIGHT); // panel1自己在画矩形
} public void change() // 改变标志
{
this.start *= -1;
} public void run() {
while (true) // 循环执行
{
this.drawMe(); // panel1画矩形
if (start == 1) {
if (WIDTH > 400) {
Graphics g = panel1.getGraphics();
Color c = g.getColor();
g.setColor(Color.white);
g.fillRect(x, y, WIDTH, HEIGHT);
g.setColor(c);
WIDTH = 0;
}
WIDTH += speed; }
try {
Thread.sleep(100);
} catch (Exception e) {
}
}
} }}
import java.awt.event.*;
import javax.swing.*;class ThreadFrame extends JFrame {
Container contentPane = getContentPane();
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JButton button1 = new JButton("线程1开始");
JButton button2 = new JButton("线程2开始");
JButton button3 = new JButton("线程3开始");
DrawThread draw1,draw2,draw3;
public ThreadFrame() {
setTitle("线程并发执行演示");
setSize(480, 480);
panel2.add(button1);
panel2.add(button2);
panel2.add(button3);
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(draw1 == null){
draw1 = new DrawThread(50, 50, 20, 3);
draw1.start = 1;
draw1.start();
}else{
draw1.change();
if(draw1.start == -1)
try {
draw1.wait();
button1.setText("线程1开始");
}
catch (Exception e1) {
e1.printStackTrace();
}
else
{
draw1.notify();
button1.setText("线程1暂停");
}
}
}
});
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(draw2 == null){
draw2 = new DrawThread(50, 75, 20, 3);
draw2.start = 1;
draw2.start();
}else{
draw2.change();
if(draw2.start == -1)
try {
draw2.wait();
button1.setText("线程2开始");
}
catch (Exception e1) {
e1.printStackTrace();
}
else
{
draw2.notify();
button1.setText("线程2暂停");
}
}
}
});
button3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(draw3 == null){
draw3 = new DrawThread(50, 100, 20, 3);
draw3.start = 1;
draw3.start();
}else{
draw3.change();
if(draw3.start == -1)
try {
draw3.wait();
button1.setText("线程3开始");
}
catch (Exception e1) {
e1.printStackTrace();
}
else
{
draw3.notify();
button1.setText("线程3暂停");
}
}
}
});
contentPane.add(panel1, BorderLayout.CENTER);
contentPane.add(panel2, BorderLayout.SOUTH);
}
class DrawThread extends Thread
{
int x, y, WIDTH = 0, HEIGHT;
int start = -1;
int speed;
DrawThread(int x, int y, int HEIGHT, int speed)
{
this.x = x;
this.y = y;
this.HEIGHT = HEIGHT; // 矩形的高
this.speed = speed;
}
public void drawMe()
{
Graphics g = panel1.getGraphics(); // 把画笔给panel1
g.setColor(Color.red);
g.fillRect(x, y, WIDTH, HEIGHT); // panel1自己在画矩形
}
public void change() // 改变标志
{
this.start *= -1;
}
public synchronized void run()
{
while (true) // 循环执行
{
this.drawMe(); // panel1画矩形
if (start == 1)
{
if (WIDTH > 400)
{
Graphics g = panel1.getGraphics();
Color c = g.getColor();
g.setColor(Color.white);
g.fillRect(x, y, WIDTH, HEIGHT);
g.setColor(c);
WIDTH = 0;
}
WIDTH += speed;
}
try {
Thread.sleep(80);
} catch (Exception e) {}
}
}
}
public static void main(String[] args)
{
Toolkit tk=Toolkit.getDefaultToolkit();
Dimension screenSize=tk.getScreenSize();
int screenWidth=screenSize.width;
int screenHeight=screenSize.height;
ThreadFrame threadFrame=new ThreadFrame();
threadFrame.setLocation(screenWidth/3, screenHeight/5);
threadFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
threadFrame.setVisible(true);
}
}