Package

10 respostas
C

Eu compilo isto e dá java.lang.NullpointerException.
vc deverá complilar pelo Exercísio TimeTest3 . appletviewer TimeTest3.html
OK
Me ajudem

//Fig. 8.9
//Definição da classe Time3 com métodos set e get
package com.deitel.jhtp4.ch08;

//Pacotes do núcleo de Java
import java.text.DecimalFormat;

public class Time3 extends Object{

private int hour;

private int minute;

private int second;
public Time3(){
    setTime(0, 0, 0);
}

public Time3(int h){
    setTime( h, 0, 0 );
}

public Time3( int h, int m){
    setTime( h, m, 0);    
}

public Time3( int h, int m, int s){
    setTime( h, m , s);
}

public Time3(Time3 time){
    setTime( time.getHour(), time.getMinute(), 
    time.getSecond());
}

public void setTime( int h, int m, int s){
    
    setHour( h );
    setMinute( m );
    setSecond( s );
}

public void setHour( int h ){
    hour = ( ( h >= 0 && h < 24) ? h : 0);    
}

public void setMinute( int m){
    minute = ( ( m >= 0 && m < 60 ) ? m : 0);
} 

public void setSecond( int s){
    second = ( ( s >= 0 && s <  60 ) ? s : 0);
}

public int getHour(){
    return hour;
}

public int getMinute(){
    return minute;
}

public int getSecond(){
    return second;
}

public String toUniversalString(){
    DecimalFormat twoDigits = new DecimalFormat("00");
    
    return twoDigits.format( getHour() ) + ":" +
       twoDigits.format( getMinute() ) + ":" +
       twoDigits.format( getSecond() );
}

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");

}

}
O outro é

//Fig.8.9
//Demostrando os métodos set e get da classe Time3

//Pacotes do núcleo de Java

import java.awt.<em>;

import java.awt.event.</em>;

//Pacotes de extensão de Java
import javax.swing.*;

//Pacoted Deitel
import com.deitel.jhtp4.ch08.Time3;

public class TimeTest3 extends JApplet
implements ActionListener{

private Time3 time;
private JLabel hourLabel, minuteLabel, secondLabel;
private JTextField hourField, minuteField, 
secondField, displayField;
private JButton tickButton;

//cria objeto Time3 e configura GUI
public void init(){
    
    Time3 time = new Time3();
    
    Container container = getContentPane();
    container.setLayout( new FlowLayout() );
    
    //configura hourLabel e hourField
    hourLabel = new JLabel("Set Hour");
    hourField = new JTextField(10);
    hourField.addActionListener(this);
    container.add( hourLabel);
    container.add( hourField);
    
    //configura minuteLabel e minuteField
    minuteLabel = new JLabel("Set Minute");
    minuteField = new JTextField(10);
    minuteField.addActionListener( this );
    container.add( minuteLabel);
    container.add( minuteField);
    
    //configura secondLabel e secondField
    secondLabel = new JLabel("Set Second");
    secondField = new JTextField(10);
    secondField.addActionListener(this);
    container.add(secondLabel);
    container.add(secondField);
    
    //configura displayField
    displayField = new JTextField(30);
    displayField.setEditable(false);
    container.add(displayField);
    
    //configura tickButton
    tickButton = new JButton("Add 1 to Second");
    tickButton.addActionListener(this);
    container.add(tickButton);
    
       
}

//trata eventos dobotão e do campo de texto
public void actionPerformed( ActionEvent actionEvent){
    
    //processa o evento tickButton
    if ( actionEvent.getSource() == tickButton )
        tick();
    
    //processa o evento hourField
    else if ( actionEvent.getSource() == hourField){
        time.setHour(
            Integer.parseInt( actionEvent.getActionCommand() ) );
        hourField.setText("");
    }
    
    //processa o evento minuteField
    else if( actionEvent.getSource() == minuteField ){
        time.setMinute(
            Integer.parseInt( actionEvent.getActionCommand() ) );
        minuteField.setText("");
    }
    
    //processa o evento secondField
    else if( actionEvent.getSource() == secondField){
        time.setSecond(
            Integer.parseInt( actionEvent.getActionCommand() ) );
        secondField.setText("");            
    }
    
    updateDisplay();  //atualiza displayField e a barra de Status
}

//atuaçiza displayField e a barra de status do contêiner do applet
public void updateDisplay(){

    displayField.setText("Hour: " + time.getHour() +
        ";Minute: " + time.getMinute() +
        ";Second: " + time.getSecond() );
        
   showStatus("Standard time is: " + time.toString() +
    "; Universal time is: " + time.toUniversalString() );
}

//soma um ao segundo e atualiza hora e minuto se necessário
public void tick(){

    time.setSecond( ( time.getSecond() + 1) % 60);
    
    if( time.getSecond() == 0){
        time.setMinute( ( time.getMinute() + 1) % 60);
        
        if( time.getMinute() == 0)
            time.setHour( ( time.getHour() + 1 ) % 24 );
    }
}

}//fim da classe TimeTest3

10 Respostas

kuchma

Nao olhei o codigo, mas se ele da NullpointerException, deve ser indicada a linha onde acontece isso. Va nessa linha e veja o que voce esta fazendo. Provavelmente eh uma chamada usando uma referencia nula. Exemplo: obj.metodo(), sendo que obj ainda esta null.

Marcio Kuchma

C

Eu sei o q significa só q não dá esse erro na compilação e sim quando executa, não aparece a linha do erro.!!!

_fs

Não tenho certeza, pois ficou muito difícil de ver o seu código sem estar endentado (use [ code]seucodigo[ /code] na hora de postar), mas acho que o erro é causado quando você tenta utilizar a instância time, pois você declara ela aqui

private Time3 time;

mas depois dá o valor para outra variável no método init
Time3 time = new Time3();

fazendo com que a primeira declarada continue null.

Improvável hehe

C

não entendi muito bem a sua resposta, por facor explique com a solução

Sami_Koivu

Oi,

Testei seu código… e concordo com o LIPE.

Que no meu caso foi a linha

time.setSecond( ( time.getSecond() + 1) % 60);

no metodo public void tick() do classe TimeTest3.

O fato de a linha do erro não aparecer poderia ser por causa de ter complido o código o a opção “-g:none” ou seja, instruindo o compilador a não incluir a informação sobre as linhas.

O que o LIPE tá dizendo é que provavelmente em vez de:

public void init(){ 
    
    Time3 time = new Time3(); 
    
    Container container = getContentPane(); 
    container.setLayout( new FlowLayout() );

você deveria ter o seguinte:

public void init(){ 
    
    this.time = new Time3(); 
    
    Container container = getContentPane(); 
    container.setLayout( new FlowLayout() );

-Sami

C

Pessoal me descupem mas agora compilei e rodei o código e ele funcionou sem eu mudar nada, sinceramente não sei o q aconteceu, deve ser pal da máquina, sei lá, pbrigada pela atenção!

aborges

Gostei da sua assinatura SAMI!!!

curiosity killed the cat

Sami_Koivu

heh heh heh… legal :slight_smile:

Tinha certeza que alguém deve estar bastante curioso :wink:

Quero deixar bem claro que adoro os gatos :slight_smile: só que não consegui pensar numa mensagem mais legal, tipo algo sobre o GUJ.

-Sami

_fs

O programa roda, mas ao clicar no botão a exceção é lançada christielencc.
Rodei o seu código e a aplicação apenas funcionou quando fiz a alteração que eu e o colega sugerimos.

Muito legal mesmo sua assinatura :smiley:

Luca

Olá

+1

[]s
Luca

Criado 11 de janeiro de 2005
Ultima resposta 12 de jan. de 2005
Respostas 10
Participantes 6