代码如下,编译出现提示,但能通过,运行出现错误
package playgame;import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;interface CharacterSource{
public void addCharacterListener(CharacterListener cl);
public void removeCharacterListener(CharacterListener cl);
public void nextCharacter();
}interface CharacterListener{
public void newCharacter(CharacterEvent ce);
}class CharacterEvent{
public CharacterSource source;
public int character;
public CharacterEvent(CharacterSource cs,int c){
source=cs;
character=c;
}
}class CharacterEventHandler{
private Vector listeners=new Vector();
public void addCharacterListener(CharacterListener cl){
listeners.add(cl);
}
public void removeCharacterListener(CharacterListener cl){
listeners.remove(cl);
}
public void fireNewCharacter(CharacterSource source,int c){
CharacterEvent ce=new CharacterEvent(source,c);
CharacterListener[] cl=(CharacterListener[] )listeners.toArray(new CharacterListener[0]);
for(int i=0;i<cl.length;i++){
cl[i].newCharacter(ce);
}
}
}class CharacterDisplayCanvas extends JComponent implements CharacterListener{
protected FontMetrics fm;
protected char[] tmpChar=new char[1];
protected int fontHeight;
public CharacterDisplayCanvas(){
setFont(new Font("Monospaced",Font.BOLD,18));
fm=Toolkit.getDefaultToolkit().getFontMetrics(getFont());
fontHeight=fm.getHeight();
}
public CharacterDisplayCanvas(CharacterSource cs){
this();
setCharacterSource(cs);
}
public void setCharacterSource(CharacterSource cs){
cs.addCharacterListener(this);
}
public Dimension preferredsize(){
return new Dimension(fm.getMaxAscent()+10,fm.getMaxAdvance()+10);
}
public synchronized void newCharacter(CharacterEvent ce){
tmpChar[0]=(char)ce.character;
repaint();
}
protected synchronized void paintComponent(Graphics gc){
Dimension d=getSize();
gc.clearRect(0,0,d.width,d.height);
if(tmpChar[0]==0)return;
int charWidth=fm.charWidth((int)tmpChar[0]);
gc.drawChars(tmpChar,0,1,(d.width-charWidth)/2,fontHeight);
}
}class RandomCharacterGenerator extends Thread implements CharacterSource{
static char[] chars;
static String charArray="abcdefghijklmnopqrstuvwxyz";
static{
chars=charArray.toCharArray();
}
Random random;
CharacterEventHandler handler;
public RandomCharacterGenerator(){
random=new Random();
handler=new CharacterEventHandler();
}
public int getPauseTime(){
return (int)(Math.max(1000,5000*random.nextDouble()));
}
public void addCharacterListener(CharacterListener cl){
handler.addCharacterListener(cl);
}
public void removeCharacterListener(CharacterListener cl){
handler.removeCharacterListener(cl);
}
public void nextCharacter(){
handler.fireNewCharacter(this,(int)chars[random.nextInt(chars.length)]);
}
public void run(){
for(;;){
nextCharacter();
try{
Thread.sleep(getPauseTime());
}catch(InterruptedException ie){
return;
}
}
}
}public class SwingTypeTester extends JFrame implements CharacterSource{
protected RandomCharacterGenerator producer;
private CharacterDisplayCanvas displayCanvas;
private CharacterDisplayCanvas feedbackCanvas;
private JButton quitButton;
private JButton startButton;
private CharacterEventHandler handler;
public SwingTypeTester(){
initComponents();
}
private void initComponents(){
handler=new CharacterEventHandler();
displayCanvas=new CharacterDisplayCanvas();
feedbackCanvas=new CharacterDisplayCanvas(this);
quitButton =new JButton();
startButton=new JButton();
add(feedbackCanvas,BorderLayout.CENTER);
add(displayCanvas,BorderLayout.NORTH);
JPanel p=new JPanel();
startButton.setLabel("start");
quitButton.setLabel("Quit");
p.add(startButton);
p.add(quitButton);
add(p,BorderLayout.SOUTH);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent evt){
quit();
}
});
feedbackCanvas.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent ke){
char c=ke.getKeyChar();
if(c!=KeyEvent.CHAR_UNDEFINED)newCharacter((int)c);
}
});
startButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
producer=new RandomCharacterGenerator();
displayCanvas.setCharacterSource(producer);
producer.start();
startButton.setEnabled(false);
feedbackCanvas.setEnabled(true);
feedbackCanvas.requestFocus();
}
});
quitButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
quit();
}
});
pack();
}
private void quit(){
System.exit(0);
}
public void addCharacterListener(CharacterListener cl){
handler.addCharacterListener(cl);
}
public void removeCharacterListener(CharacterListener cl){
handler.removeCharacterListener(cl);
}
public void newCharacter(int c){
handler.fireNewCharacter(this,c);
}
public void nextCharacter(){
throw new IllegalStateException("We don't produce on demand");
}
public static void main(String args[]){
new SwingTypeTester().show();
}
}
package playgame;import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;interface CharacterSource{
public void addCharacterListener(CharacterListener cl);
public void removeCharacterListener(CharacterListener cl);
public void nextCharacter();
}interface CharacterListener{
public void newCharacter(CharacterEvent ce);
}class CharacterEvent{
public CharacterSource source;
public int character;
public CharacterEvent(CharacterSource cs,int c){
source=cs;
character=c;
}
}class CharacterEventHandler{
private Vector listeners=new Vector();
public void addCharacterListener(CharacterListener cl){
listeners.add(cl);
}
public void removeCharacterListener(CharacterListener cl){
listeners.remove(cl);
}
public void fireNewCharacter(CharacterSource source,int c){
CharacterEvent ce=new CharacterEvent(source,c);
CharacterListener[] cl=(CharacterListener[] )listeners.toArray(new CharacterListener[0]);
for(int i=0;i<cl.length;i++){
cl[i].newCharacter(ce);
}
}
}class CharacterDisplayCanvas extends JComponent implements CharacterListener{
protected FontMetrics fm;
protected char[] tmpChar=new char[1];
protected int fontHeight;
public CharacterDisplayCanvas(){
setFont(new Font("Monospaced",Font.BOLD,18));
fm=Toolkit.getDefaultToolkit().getFontMetrics(getFont());
fontHeight=fm.getHeight();
}
public CharacterDisplayCanvas(CharacterSource cs){
this();
setCharacterSource(cs);
}
public void setCharacterSource(CharacterSource cs){
cs.addCharacterListener(this);
}
public Dimension preferredsize(){
return new Dimension(fm.getMaxAscent()+10,fm.getMaxAdvance()+10);
}
public synchronized void newCharacter(CharacterEvent ce){
tmpChar[0]=(char)ce.character;
repaint();
}
protected synchronized void paintComponent(Graphics gc){
Dimension d=getSize();
gc.clearRect(0,0,d.width,d.height);
if(tmpChar[0]==0)return;
int charWidth=fm.charWidth((int)tmpChar[0]);
gc.drawChars(tmpChar,0,1,(d.width-charWidth)/2,fontHeight);
}
}class RandomCharacterGenerator extends Thread implements CharacterSource{
static char[] chars;
static String charArray="abcdefghijklmnopqrstuvwxyz";
static{
chars=charArray.toCharArray();
}
Random random;
CharacterEventHandler handler;
public RandomCharacterGenerator(){
random=new Random();
handler=new CharacterEventHandler();
}
public int getPauseTime(){
return (int)(Math.max(1000,5000*random.nextDouble()));
}
public void addCharacterListener(CharacterListener cl){
handler.addCharacterListener(cl);
}
public void removeCharacterListener(CharacterListener cl){
handler.removeCharacterListener(cl);
}
public void nextCharacter(){
handler.fireNewCharacter(this,(int)chars[random.nextInt(chars.length)]);
}
public void run(){
for(;;){
nextCharacter();
try{
Thread.sleep(getPauseTime());
}catch(InterruptedException ie){
return;
}
}
}
}public class SwingTypeTester extends JFrame implements CharacterSource{
protected RandomCharacterGenerator producer;
private CharacterDisplayCanvas displayCanvas;
private CharacterDisplayCanvas feedbackCanvas;
private JButton quitButton;
private JButton startButton;
private CharacterEventHandler handler;
public SwingTypeTester(){
initComponents();
}
private void initComponents(){
handler=new CharacterEventHandler();
displayCanvas=new CharacterDisplayCanvas();
feedbackCanvas=new CharacterDisplayCanvas(this);
quitButton =new JButton();
startButton=new JButton();
add(feedbackCanvas,BorderLayout.CENTER);
add(displayCanvas,BorderLayout.NORTH);
JPanel p=new JPanel();
startButton.setLabel("start");
quitButton.setLabel("Quit");
p.add(startButton);
p.add(quitButton);
add(p,BorderLayout.SOUTH);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent evt){
quit();
}
});
feedbackCanvas.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent ke){
char c=ke.getKeyChar();
if(c!=KeyEvent.CHAR_UNDEFINED)newCharacter((int)c);
}
});
startButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
producer=new RandomCharacterGenerator();
displayCanvas.setCharacterSource(producer);
producer.start();
startButton.setEnabled(false);
feedbackCanvas.setEnabled(true);
feedbackCanvas.requestFocus();
}
});
quitButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
quit();
}
});
pack();
}
private void quit(){
System.exit(0);
}
public void addCharacterListener(CharacterListener cl){
handler.addCharacterListener(cl);
}
public void removeCharacterListener(CharacterListener cl){
handler.removeCharacterListener(cl);
}
public void newCharacter(int c){
handler.fireNewCharacter(this,c);
}
public void nextCharacter(){
throw new IllegalStateException("We don't produce on demand");
}
public static void main(String args[]){
new SwingTypeTester().show();
}
}
解决方案 »
- 请高手解决一个问题。关于final类型
- 求助,为什么显示不出来我编辑的记事本?
- JAVA的SWT里面.close()和.dispose()区别?
- java threads , concurrency etc..............
- 请问版主为什么我以前的帖,今天被删除了.
- 大问题
- 新手入门:如何在项目中导入原有的java包(jbuilder)?
- 程序设计,无论高手还是新手,都来看一下!
- 在JCreator中如何设断点调试?
- SYBASE11.9通过JDBC来链接据库时,我做的conn不支持ROLLBACK(来者有分)
- 难,如何实现点击一部分网页的内容,然后找到它的源代码
- 【java】如何在table中响应鼠标双击事件
Note: Recompile with -deprecation for details.编译时的提示
楼主你输入这个看看。
改成
private Vector<CharacterListener> listeners=new Vector<CharacterListener>();
改成
new SwingTypeTester().setVisible(true);
fm=Toolkit.getDefaultToolkit().getFontMetrics(getFont());
这个的问题。getFontMetrics过时了.
要不你下个新版的jdk试试?