LS说错了,应该是DataInputStream的readLine方法已经过时了,下面是摘自JDK 1.6的DataInputStream类:
readLine()
已过时。 该方法无法将字节正确转换为字符。从 JDK 1.1 开始,读取文本行的首选方法是使用 BufferedReader.readLine() 方法。对于使用 DataInputStream 类读取文本行的程序,可以转而使用 BufferedReader 类,实现方式是通过将以下形式的代码:
DataInputStream d = new DataInputStream(in);
替换为:
BufferedReader d
= new BufferedReader(new InputStreamReader(in));
所以可以写成:
str = new BufferedReader(new BufferedInputStream(System.in)).readLine();
其实一般从控制台输入可以用Scanner类,写成:
java.util.Scanner input = new java.util.Scanner(System.in);
str = input.nextLine();
仔细看文档,
应该用 setContentAreaFilled(false) 和 setBorderPainted(false),
而不要用 setOpaque(false)。
因为 setContentAreaFilled() 方法只是“可能”造成组件的不透明属性发生更改。
===================================================================
public void setContentAreaFilled(boolean b)
设置 contentAreaFilled 属性。如果该属性为 true,则按钮将绘制内容区域。如果希望有一个透明的按钮,比如只是一个图标的按钮,那么应该将此属性设置为 false。不要调用 setOpaque(false)。contentAreaFilled 属性的默认值为 true。
此方法可能造成组件的不透明属性发生更改。
调用此方法的具体行为在各个组件和各个 L&F 之间是各不相同的。
参数:
b - 如果为 true,则应该填充内容;如果为 false,则不填充内容区域
你使用的BufferedInputStream类的readLine方法,在JDK5中,已经过时,也就是在5里没有这个方法了但1.4中还有,所以日食会告诉你,不建议用。