import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.lang.*;class mpanel extends JPanel implements Runnable
{
Thread t;
int i;
private static final Color[] colors={Color.black,Color.blue,Color.cyan,Color.darkGray,Color.gray,Color.green,Color.lightGray,Color.magenta,Color.orange,Color.pink,Color.red,Color.white,Color.yellow}; public mpanel()
{
t=new Thread(this);
t.start();
}

public void run()
{
while(true)
{
i=(int)(Math.round(Math.random()*12));
repaint(); try
{
t.sleep(1000);
}
catch (InterruptedException e){}
} } public void paint(Graphics g)
{
g.setColor(colors[i]);
g.fillOval(0,0,getSize().width,getSize().height); }}public class ColorOvals extends JFrame 
{
public int N;
public int M;
public ColorOvals(String s)
{
super(s);
        N=5;
M=100;
Container con=getContentPane(); addWindowListener(new mywin()); con.setLayout(new GridLayout(N,N));
for(int k=1;k<=N*N;k++)
{
con.add(new mpanel());
}
}
public class mywin extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
} public static void main(String args[])
{
ColorOvals frm=new ColorOvals("ColorOvals");
frm.setSize(700,600);
frm.show(); }}N,M分别是几秒变换一次,窗口中有多少个网络?现在我想把N,M的值,在程序的执行的时候,跟在命令行后面,应该怎么弄呢?还有帮我看下,线程中有什么问题没有,虽然程序是可以执行的.但是我都不理解线程这个东西.SLEEP(1000),就是暂停1秒然后继续执行吗?

解决方案 »

  1.   

    能跑就好了,线程的话,专门有一本书.java threads
      

  2.   

    <html>
    <body>
    再试一次
    </body>
    </html>
      

  3.   

    public static void main(String args[])
    {
    ColorOvals frm=new ColorOvals("ColorOvals");
    frm.setSize(
    Integer.parseInt(args[0]), 
    Integer.parseInt(args[1]));
    frm.show();
    }
      

  4.   

    窗口中的网格是固定的,由
    con.setLayout(new GridLayout(N,N));
    语句,使用GridLayout指定。sleep(1000)就是暂停1秒。这个程序很简单,每个网格是一个类mpanel的实例,而每个mpanel的实例分别运行于各自独立的线程中。每隔1秒,mpanel随机更改自身的颜色索引。
    i=(int)(Math.round(Math.random()*12));
    然后重画自身。
    repaint()
    从而触发paint方法,改变自身颜色。网格是在ColorOvals类的构造函数中被创建的,该类是一个Frame,版面布局使用GridLayout。
      

  5.   

    程序我运行了一下挺好看的 呵呵sleep(1000)是让线程进入阻塞状态,线程管理器忽略此线程过了1秒后 ,然后进入继续状态,参与CPU竞争
      

  6.   

    晕,这个程序是我编写的.我想在命令行输入的时候,带上2个参数,一个是秒,一个是网格数.秒是M,网络数是N.OK?要进行判断的,例如命令行后面第一个有没有参数
      

  7.   

    1、更改构造函数:
    public ColorOvals(String s,int n,int m)
    {
            super(s);
            N=n;
            M=m;
    ...2、在main中传入n,m参数
    public static void main(String args[])
    {
       if (args.length != 2)
      {
    System.err.println("Usage: cmd n m");
    System.exit(1);
      }
      try {
         ColorOvals frm=new ColorOvals("ColorOvals",Integer.parseInt(args[0]),Integer.parseInt(args[1]));
         frm.setSize(700,600);
         frm.show();
     }
    catch (NumberFormatException e)
    {
       e.printStackTrace();
       System.exit(1);
    }}