大家帮我看看这代码有什么错误吗?为什么不能设置时间?
这是time.javapackage cn.edu.lzq;
import java.text.DecimalFormat;
public class Time extends Object{
private int hour;
private int minute;
private int second;

public Time(){
setTime( 0, 0, 0 );
} public void setTime(int hour, int minute, int second) {
// TODO Auto-generated method stub
setHour( hour );
setMinute( minute );
setSecond( second );
}
public void setHour(int h) {
// TODO Auto-generated method stub
hour = ( ( h >= 0 && h < 24) ? h : 0);
}

public void setMinute(int m) {
// TODO Auto-generated method stub
second = ( ( m >= 0 && m < 60) ? m : 0);
}

public void setSecond(int s) {
// TODO Auto-generated method stub
second = ( ( s >= 0 && s < 60) ? s : 0);
}

public int getHour() {
// TODO Auto-generated method stub
return hour;
} public int getMinute() {
// TODO Auto-generated method stub
return minute;
} public int getSecond() {
// TODO Auto-generated method stub
return second;
}

public String toString(){
DecimalFormat twoDigits = new DecimalFormat ( "00" );

return ( ( getHour() == 12 || getHour() == 0 ) ? 
12 : getHour() % 12 ) + " : " + 
twoDigits.format( getMinute() ) +
  " : " + twoDigits.format( getSecond() ) + 
  ( getHour() < 12 ? " AM " : " PM ");
}
}
下面的是TimeTestWindow2.javapackage cn.edu.lzq;
import java.awt.*;
import java.awt.event.*;import javax.swing.*;public class TimeTestWindow2 extends JFrame {
private Time time;
private JLabel hourLabel,minuteLabel,secondLabel;
private JTextField hourField,minuteField,
secondField,displayField;


public TimeTestWindow2(){

super( "Inner Class Demonstration" );

Container container = getContentPane();
container.setLayout( new FlowLayout() );

hourLabel = new JLabel( "Set Hour" );
hourField = new JTextField( 10 );

hourField.addActionListener( new ActionListener(){
public void actionPerformed( ActionEvent event )
{
time.setHour( Integer.parseInt( event.getActionCommand() ) );
hourField.setText( "" );
displayTime();
}
}//end anonymous inner class
); //end call to addActionListener 
container.add( hourLabel );
container.add( hourField );

minuteLabel = new JLabel( "Set Minute" );
minuteField = new JTextField( 10 );

minuteField.addActionListener( new ActionListener(){
public void actionPerformed( ActionEvent event )
{
time.setMinute( Integer.parseInt( event.getActionCommand() ) );
minuteField.setText( "" );
displayTime();
}
}//end anonymous inner class
); //end call to addActionListener 
container.add( minuteLabel );
container.add( minuteField );

secondLabel = new JLabel( "Set Hour" );
secondField = new JTextField( 10 );

secondField.addActionListener( new ActionListener(){
public void actionPerformed( ActionEvent event )
{
time.setSecond( Integer.parseInt( event.getActionCommand() ) );
secondField.setText( "" );
displayTime();
}
}//end anonymous inner class
); //end call to addActionListener 
container.add( secondLabel );
container.add( secondField );

displayField = new JTextField ( 30 );
displayField.setEditable( false );
container.add( displayField );
}
public void displayTime()
{
displayField.setText( "The time is: " + time );
}

public static void main(String[] args) {
// TODO Auto-generated method stub
TimeTestWindow2 window = new TimeTestWindow2();

window.addWindowListener(

new WindowAdapter(){

public void windowClosing ( WindowEvent event )
{
System.exit(0);
}
} //end anonymous inner class
); //end call to addWindowListener

window.setSize( 400, 120 );
window.setVisible( true );
} //end method main} //end class TimeTestWindow

解决方案 »

  1.   

    三个TextField的监听类有问题吧,里面的代码没有执行。还有TimeTestWindow2.java中的time变量没有初始化,会抛异常的。
      

  2.   

    time没有初始化,所以监听器方法会报空指针错误,在TimeTestWindow2的构造函数里,把time初始化一下就好了
    public TimeTestWindow2(){
            
        super( "Inner Class Demonstration" );
        time = new Time(); //追加一个初始化处理