我又把程序改了一下,这下没那么多的麻烦,编译运行都行了。
以下是我改过的
class wjggai extends Thread implements Runnable
{
//Thread wjg;
//int i=0;
/* public wjggai()
{
wjg=new Thread(this);
}*/
public void run()
{
for (int i=0;i<=3;i++)
{
System.out.println("我是一个学生!");
try
{
sleep(3000);
}
catch(InterruptedException e){}
}
}
/*public void start()
{
wjg.start();
}*/
public static void main(String args[])
{
wjggai w1=new wjggai();
w1.start();
}
}
这下没问题了! :)
以下是我改过的
class wjggai extends Thread implements Runnable
{
//Thread wjg;
//int i=0;
/* public wjggai()
{
wjg=new Thread(this);
}*/
public void run()
{
for (int i=0;i<=3;i++)
{
System.out.println("我是一个学生!");
try
{
sleep(3000);
}
catch(InterruptedException e){}
}
}
/*public void start()
{
wjg.start();
}*/
public static void main(String args[])
{
wjggai w1=new wjggai();
w1.start();
}
}
这下没问题了! :)
解决方案 »
- 局域网传递数据的问题??????
- 已知package名(字符串)能否得到package里(包括子package)里所有的class的name???
- 请问java如何实现从硬盘读入一个图片,显示并且能够在原图片基础上进行修改?
- NoClassDefFoundError怎么解决
- 如何在JAVA中实现“析构函数”!!(急,高分)
- 一个关于wait方法的难题?
- 《advanced java2 platform how to program英文原版》请大家评价?
- 小问题一个
- 翻译一条题目20分!
- ^O^^O^^O^来者不拒全部有分^O^^O^^O^
- 怎样才能让用graphics 画出的图形,和用jPanel画出来得一样
- java怎样做成setup程序
{
Thread wjg;
//int i=0;
public wjggai()
{
wjg=new Thread(this);
}
public void run()
{
for (int i=0;i<=3;i++)
{
System.out.println("我是一个学生!");
try
{
wjg.sleep(3000);
}
catch(InterruptedException e){}
}
}
public void start()
{
wjg.start();
}
public static void main(String args[])
{
wjggai w1=new wjggai();
w1.start();
}
}
第二程序因为你继承了Thread这个类啦,所以你可以start()了!!
而你的第二个例子,有一个地方是多此一举的,你只要继承 Thread 类就行了,不用实现 Runnable 接口。也就是说你只要写 class wjggai extends Thread 就可以了。而它为什么能运行成功就因为 Thread 类中有一个 start() 方法,而 wjggai 类继承了 Thread 类就说明它也继承了 Thread类的 start() 方法,所以能运行成功!
我是这样觉得的,不知道对你有没有帮助! ^_^
{
Thread wjg;
wjggai_1()
{
wjg=new Thread(this);
}
public void run()
{
for (int i=0;i<=3;i++)
{
System.out.println("我是一个学生!");
try
{
wjg.sleep(3000);
}
catch(InterruptedException e){}
}
}
public void start()
{
wjg.start();
}
public static void main(String args[])
{
wjggai_1 w1=new wjggai_1();
w1.start();
}
}
这是我第一个要问的问题,在这一个类中为什么要调用二个start()方法才能使程序有运行结果。
去掉public void start()
{
wjg.start();
}
会报w1.start();是个错误的方法,而去掉w1.start();则编译可过,但运行没有结果。
这是什么道理?下面是我作的改动:
//import java.awt.*;
class wjggai extends Thread implements Runnable
{ public void run()
{
for (int i=0;i<=3;i++)
{
System.out.println("我是一个学生!");
try
{
sleep(3000);
}
catch(InterruptedException e){}
}
}
public static void main(String args[])
{
wjggai w1=new wjggai();
w1.start();
}
}
我把Thread类和Runnable接口都用上,程序更简洁,运行也成功了。
大家看看这两个程序,发表一下你们的意见。
谢谢!
去掉public void start()
{
wjg.start();
}
会报w1.start();是个错误的方法,而去掉w1.start();则编译可过,但运行没有结果。
这是什么道理?不管怎样要线程启动都得调用Tread中的start(),你说调用了两次,只不过是你的那个做了个中介而已。
去掉public void start()
{
wjg.start();
}
会报w1.start();是个错误的方法,而去掉w1.start();则编译可过,但运行没有结果。
这是什么道理?因为w1是wjggai类的实例,去掉public void start()这个以后,wjggai中就已经没有start()这个方法了那当然会报w1.start();是个错误的方法啦。
而你去掉主函数中的w1.start()程序是没错,编译是可以通过,但是并没有启动线程当然运行就没有结果了。
而主函数中主函数中的start()方法是wjggai类的方法
你把第一个中:
public void start()改为public void startThread()
下面主函数中:
w1.start();改为w1.startThread();
这样就应该明白了
你的wjg.start()的调用才使得你的线程开始运行!
而你w1.start()的调用只不过是要调用wjggai类中你自己编写的start()方法,而这个方法可以取任何可行了名字。而你好巧不巧的用了start这个名字而已!^_^
谢谢你的热情帮助。你说:“你的wjg.start()的调用才使得你的线程开始运行!
而你w1.start()的调用只不过是要调用wjggai类中你自己编写的start()方法,而这个方法可以取任何可行了名字。而你好巧不巧的用了start这个名字而已!”
按你说的,w1.start()是wjggai类中调用的方法,是我自己编写的方法,巧的是同名而已。那这么说w1.start()在程序中也就不能调用run()方法了。
可我把程序中的w1.start()注释掉,编译可以通过。运行却没结果。
看来少了w1.start()方法的调用,还是不行。
我想这与你说的
“而你w1.start()的调用只不过是要调用wjggai类中你自己编写的start()方法,而这个方法可以取任何可行了名字。而你好巧不巧的用了start这个名字而已!”
有点矛盾!
欢迎参加讨论!谢谢!!!
sochikit(唔系好人)说的很对,我用你的办法,作了出来。上面我回错对象了,那句话不是你说的。:)我还想请大家看看我改后的程序。
我是把Thread类和接口都用上了。结果也出来了,而且看上去更简洁了。
我的这种用法对吧,以后在作线程的时候可不可以提倡用这种方法。
class wjggai extends Thread implements Runnable
{
public void run()
{
for (int i=0;i <=3;i++)
{
System.out.println( "我是一个学生! ");
try
{
sleep(3000);
}
catch(InterruptedException e){}
}
}
public static void main(String args[])
{
wjggai w1=new wjggai();
w1.start();
}
}