A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄嘉慧 初级黑马   /  2012-3-29 17:03  /  1939 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


//-----------------------------代码--------------------------------------
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文件覆盖掉吧。

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


7 个回复

正序浏览
yuanshilieshou 发表于 2012-3-30 17:13
main run!----0
main run!----1
main run!----2

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

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

真是神奇的错误。
回复 使用道具 举报

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-29 17:32
那就关掉 命令提示符  然后再重新打开 javac 就可以了。

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

这也算是个边缘小问题吧。
算了,既然问题解决了就不去纠结了,把时间花在能搞懂的知识上吧。
回复 使用道具 举报
黄嘉慧 发表于 2012-3-29 17:27
可能我没说清楚。

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

那就关掉 命令提示符  然后再重新打开 javac 就可以了。
回复 使用道具 举报
可能我没说清楚。

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

我在DOS下执行javac ThreadDemo1.java

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

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

回复 使用道具 举报
不用纠结这个小问题 。。。直接重新javac   生成class
应该默认重新编译自动覆盖  同名class文件
回复 使用道具 举报
这个代码其实是两个类,也就是两个java文件,javac的时候会产生两个.class文件。在你修改了程序之后,这两个类都需要重新编译链接。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马