java编译时提示找不到符号

我是自己学java,这是我自己第一次写的几行代码,在cmd中编译时提示找不到符号,望各位大侠指点指点,代码如下:
import java.awt.*;
import java.awt.event.*;
public class My extends Frame implements ActionListener{
public void My(){
Button lchange=new Button("变色");
lchange.setColor(new Color(0,0,255));
add(lchange);
setSize(51,65);
setVisible(true);
}
public void actionPerformed(ActionEvent ae){
if(ae.getSource==lchange)
lchange.setBackground(new Color(125,255,34));
}
public static void main (String[] args) {
new My();
}

}

提示的结果是:

C:\>javac My.java
My.java:6: 找不到符号
符号: 方法 setColor(java.awt.Color)
位置: 类 java.awt.Button
lchange.setColor(new Color(0,0,255));
^
My.java:12: 找不到符号
符号: 变量 getSource
位置: 类 java.awt.event.ActionEvent
if(ae.getSource==lchange)
^
My.java:12: 找不到符号
符号: 变量 lchange
位置: 类 My
if(ae.getSource==lchange)
^
My.java:13: 找不到符号
符号: 变量 lchange
位置: 类 My
lchange.setBackground(new Color(125,255,34));
^
4 错误

C:\>

用MYECLIPSE开发环境
通常情况下,在编写java文件时,会有引用到自已定义的一些类,如果按通常的javac *.java的形式来编译会出现找不到符号的错误。
以下提供了两种方法

假如在d:/web/wsh下有a.java和b.java两个文件,在b.java文件中有引用了a.java。下面是编译的方法

1.方法一:
进入d:/web/wsh下: javac a.java
然后退出wsh目录即进入d:/wsh下 javac wsh/b.java即可编译成功!

2.方法二:通过使用javac -classpath(cp)参数
进入d:/web /wsh下: javac a.java
还是在d:/wsh/wsh下: javac -classpath d:/web/wsh b.java
这样也可以编译成功!

以下方法都通过测试!

以下是javac编译的参数:
用法:javac <选项> <源文件>
选项:
-g:none 不生成任何调试信息
-g:{lines,vars,source} 只生成某些调试信息
-nowarn 不生成任何警告
-verbose 输出有关编译器正在执行的操作的消息
-deprecation 输出使用已过时的 API 的源位置
-classpath <路径> 指定查找用户类文件的位置
-cp <路径> 指定查找用户类文件的位置
-sourcepath <路径> 指定查找输入源文件的位置
-bootclasspath <路径> 覆盖引导类文件的位置
-extdirs <目录> 覆盖安装的扩展目录的位置
-endorseddirs <目录> 覆盖签名的标准路径的位置
-d <目录> 指定存放生成的类文件的位置
-encoding <编码> 指定源文件使用的字符编码
-source <版本> 提供与指定版本的源兼容性
-target <版本> 生成特定 VM 版本的类文件
-version 版本信息
-help 输出标准选项的提要
-X 输出非标准选项的提要
-J<标志> 直接将 <标志> 传递给运行时系统
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-10-04
import java.awt.*;
import java.awt.event.*;

public class My extends Frame implements ActionListener {
Button lchange = new Button("变色");
public My() {
add(lchange);
setSize(51, 65);
setVisible(true);
}

public void actionPerformed(ActionEvent ae) {
if (ae.getSource() == lchange)
lchange.setBackground(new Color(125, 255, 34));
}

public static void main(String[] args) {
new My();
}

}
至少这样不会有错了。
错误 一:public My应该是构造函数。不应该是方法。
错误二:if (ae.getSource() == lchange)漏括号
错误三:Button lchange = new Button("变色");放到外面来,不然拿不到
错误四:lchange.setColor(new Color(0,0,255));是不对的。BUTTON类没有这个方法。
建议一:用MYECLIPSE开发环境,没人用CMD里来运行的。
建议二: 要实现变色功能要自己写事件本回答被提问者采纳
第2个回答  2010-02-20
变量 lchange声明在方法My()中,属于局部变量,在其他方法内当然无法访问。该为实例变量吧,就是把Button lchange=new Button("变色");这条语句改为lchange=new Button("变色");然后在public class My extends Frame implements ActionListener{
的下面, public void My(){ 的上面 写上Button lchange;
第3个回答  2010-02-20
Button类没有setColor()这个方法,ae.gerSource()是方法,后面要加上();
My()是构造方法,没有返回值,前面不能加void ;Ichange是构造函数里局部变量,要想在其他方法里访问,要把它声明为成员变量。
相似回答