黑马程序员技术交流社区

标题: 一个奇怪的错误------创建线程小程序。 [打印本页]

作者: 黄嘉慧    时间: 2012-3-29 17:03
标题: 一个奇怪的错误------创建线程小程序。

//-----------------------------代码--------------------------------------
class Demo extends Thread
{
        public void run()
        {
                for(int x=0; x<60; x++)
                        System.out.println("demo run!----"+x);
                //System.out.println("Demo Run!");
        }
}

class ThreadDemo1
{
        public static void main(String[] args)
        {
                Demo d = new Demo();
                d.start();
                for(int x=0; x<60; x++)
                        System.out.println("main run!----"+x);
        }
}

看着眼熟吧?
这是我看了毕向东老师的视频后,写出来的一段小程序,用于创建一个线程。
类的说明:Demo类继承Thread类,并复写Thread类中的run方法。
主函数动作:创建Demo对象d,并调用d.start();,开启线程。

然后:
//------------------------------------------------运行结果----------------------------------------------

ThreadDemo1.java:16: 错误: 找不到符号
                d.start();
                 ^
  符号:   方法 start()
  位置: 类型为Demo的变量 d
1 个错误


//----------------------------问题的解决-----------------------------
仔细瞅了老半天,愣是没揪出问题,让人不爽之极。
甚至到后来,我竟然丧心病狂地去翻看Thread类的源代码,企图找出JDK1.7.0在Thread类中没有定义start方法的证据。
经过一番功夫,最终郁闷地发现:在其他的路径此程序均能正常运行。在当前路径却死活不肯通过编译。

不知怎的,忽然灵机一动,我把这个特殊的目录里所有类文件删除,重新编译。------问题解决。


//-------------------问题的原因?---------------------------------------
现在看来,问题的出处应该是那几个被我删掉的类文件(Demo.class, Thread.class, 至于ThreadDemo1.class大概没有吧??)

现在真正的问题来了:哪怕原来的类文件有问题,我们用javac命令把正常代码编译一遍,应该是能把有问题的.class文件覆盖掉吧。

现在却需要手动删除错误的类文件。
所以问题出现的真正原因到底是什么呢?



作者: 刘士    时间: 2012-3-29 17:08
这个代码其实是两个类,也就是两个java文件,javac的时候会产生两个.class文件。在你修改了程序之后,这两个类都需要重新编译链接。
作者: 翟友伟    时间: 2012-3-29 17:13
不用纠结这个小问题 。。。直接重新javac   生成class
应该默认重新编译自动覆盖  同名class文件
作者: 黄嘉慧    时间: 2012-3-29 17:27
可能我没说清楚。

以上代码都在ThreadDemo1.java源文件中。

我在DOS下执行javac ThreadDemo1.java

出现了
ThreadDemo1.java:16: 错误: 找不到符号
                d.start();
                 ^
  符号:   方法 start()
  位置: 类型为Demo的变量 d
1 个错误

后来实验证明,我把原来错误的.class文件删除后,javac ThreadDemo1.java就通过了。
也就是说,这个命令之前没能用正确的类文件覆盖掉错误的类文件。


作者: 刘士    时间: 2012-3-29 17:32
黄嘉慧 发表于 2012-3-29 17:27
可能我没说清楚。

以上代码都在ThreadDemo1.java源文件中。

那就关掉 命令提示符  然后再重新打开 javac 就可以了。
作者: 黄嘉慧    时间: 2012-3-30 11:32
刘士 发表于 2012-3-29 17:32
那就关掉 命令提示符  然后再重新打开 javac 就可以了。

我当初连“重启”都使上了,但还是不行。
现在倒是丁点问题都没发现。

这也算是个边缘小问题吧。
算了,既然问题解决了就不去纠结了,把时间花在能搞懂的知识上吧。
作者: 邵中国    时间: 2012-3-30 17:13

main run!----0
main run!----1
main run!----2
main run!----3
main run!----4
main run!----5
main run!----6
main run!----7
main run!----8
main run!----9
main run!----10
main run!----11
main run!----12
main run!----13
main run!----14
main run!----15
main run!----16
main run!----17
main run!----18
main run!----19
main run!----20
main run!----21
main run!----22
main run!----23
main run!----24
main run!----25
main run!----26
main run!----27
main run!----28
main run!----29
main run!----30
main run!----31
main run!----32
main run!----33
main run!----34
main run!----35
main run!----36
main run!----37
main run!----38
main run!----39
main run!----40
main run!----41
main run!----42
main run!----43
main run!----44
main run!----45
main run!----46
main run!----47
main run!----48
main run!----49
demo run!----0
demo run!----1
demo run!----2
demo run!----3
demo run!----4
demo run!----5
demo run!----6
demo run!----7
demo run!----8
demo run!----9
demo run!----10
demo run!----11
demo run!----12
demo run!----13
demo run!----14
demo run!----15
demo run!----16
demo run!----17
main run!----50
main run!----51
main run!----52
main run!----53
main run!----54
main run!----55
main run!----56
main run!----57
main run!----58
main run!----59
demo run!----18
demo run!----19
demo run!----20
demo run!----21
demo run!----22
demo run!----23
demo run!----24
demo run!----25
demo run!----26
demo run!----27
demo run!----28
demo run!----29
demo run!----30
demo run!----31
demo run!----32
demo run!----33
demo run!----34
demo run!----35
demo run!----36
demo run!----37
demo run!----38
demo run!----39
demo run!----40
demo run!----41
demo run!----42
demo run!----43
demo run!----44
demo run!----45
demo run!----46
demo run!----47
demo run!----48
demo run!----49
demo run!----50
demo run!----51
demo run!----52
demo run!----53
demo run!----54
demo run!----55
demo run!----56
demo run!----57
demo run!----58
demo run!----59

D:\Java\jdk1.6.0_31
没什么事发生啊
作者: 黄嘉慧    时间: 2012-3-31 12:15
yuanshilieshou 发表于 2012-3-30 17:13
main run!----0
main run!----1
main run!----2

我编译运行也没问题。。。。当时有问题,在删掉错误的类文件重新编译后就没事了。

当时应该把那两个错误的类文件备份的。

真是神奇的错误。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2