Peloamordedeus, alguém me ajude com este código

Estou estudando java com ajuda de um livro. Um dos exercícios propostos é este aqui.

[code]import java.awt.;
import java.awt.event.
;
import javax.swing.;
import java.text.
;

public abstract class Corrida extends JApplet implements ActionListener
{
JLabel lTempo, lResultado;
JTextField tTempo, tResultado;
JTextArea output;
JButton bTempo;

int a[] = new int[ 70 ];
int iLebre = 0, iTart = 0, x = 0, iTempo;
String display = "";	

public void init()
{
	Container c = getContentPane();
	c.setLayout( new FlowLayout() );
			
	lTempo = new JLabel( "Tempo" );
	c.add( lTempo );
	tTempo = new JTextField( 10 );
	tTempo.setEditable( false );
	c.add( tTempo );
	
	lResultado = new JLabel( "Resultado" );
	c.add( lResultado );
	tResultado = new JTextField( 10 );
	tResultado.setEditable( false );
	c.add( tResultado );
	
	bTempo = new JButton( "Round" );
	bTempo.addActionListener( this );
	c.add( bTempo );
	
	output = new JTextArea( 4, 75 );
	output.setFont( new Font( "Courier", Font.PLAIN, 12 ) );
	c.add( output );
}

public void ActionPerformed( ActionEvent e )
{
	Correr();
}

public void Correr()
{
	int x = 0, y = 0;		

	if ( iLebre < a.length && iTart < a.length )
	{
		x = 1 + ( int ) ( Math.random() * 10 ); //tartaruga
		switch( x )
		{
			case 1: case 2: case 3: case 4: case 5: //andar rapido
				iTart += 3;
				if( iTart > 70 )
				{
					iTart = 70;
					a[ iTart ] += 2;
				}
				break;
			case 6: case 7: //escorregao
				iTart -= 6;
				if( iTart < 1 )
				{
					iTart = 1;
					a[ iTart ] += 2;
				}
				break;
			case 8: case 9: case 10: //andar lento
				iTart += 1;
				a[ iTart ] += 2;
				break;
		}
		y = 1 + ( int ) ( Math.random() * 10 ); //lebre
		switch( y )
		{
			case 1: case 2: //dormindo
				++a[ iLebre ];
				break;
			case 3: case 4: // salto grande
				iLebre += 9;
				if( iLebre > 70 )
				{
					iLebre = 70;
					++a[ iLebre ];
				}
				break;
			case 5: // escorregao grande
				iLebre -= 12;
				if( iLebre < 1 )
				{
					iLebre = 1;
					++a[ iLebre ];
				}
				break;
			case 6: case 7: case 8: // salto pequeno
				iLebre += 1;
				++a[ iLebre ];
				break;
			case 9: case 10: // escorregao pequeno
				iLebre -= 2;
				if( iLebre < 1 )
				{ iLebre = 1;
					++a[ iLebre ];
				}
				break;
		}
	}

	else if( iTart >= a.length )
		tResultado.setText( "A Tartaruga venceu!" );
	else if( iLebre >= a.length );
		tResultado.setText( "A Lebre venceu!" );
	if( iTart >= a.length && iLebre >= a.length )
		tResultado.setText( "Empate!" );
		
	++iTempo;
	tTempo.setText( Integer.toString( iTempo ) );
	
	Pintar(); //imprime
	output.setText( display );
	
	a[ iTart ] = 0; //zera contadores para o print
	a[ iLebre ] = 0; 
}

public void Pintar()
{
	display += "";
	
	for( int i = 0; i < a.length; i++ )
	{
		 if( a[ i ] == 1 )
		 	display += "L";
		 else if( a[ i ] == 2 )
		 	display += "T";
		 else
		 	display += ".";
	}
}

}[/code]

O problema é: ele compila perfeitamente, mas no momento da execução do applet ele não pode ser inicializado.

Alguém já teve algum problema parecido e pode me ajudar?

Ola,

PQ sua classe é abstract ???

[]'s

Se eu não a defino como abstract ocorre um erro de compilação exigindo que a classe seja abstract por causa do ActionListener.

Ao invés de :

public void ActionPerformed( ActionEvent e )

escreva:

public void actionPerformed( ActionEvent e )

Repare que começa com “a” minúsculo, não maiúsculo. Daí sua classe não precisa ser abstract.

Olá,

Você pode tentar utilizar o HTMLConverter.
http://java.sun.com/products/plugin/1.3/docs/htmlconv.html

Ele vai gerar o html de chamada para o seu JApplet com a carga do plug-in necessário.

O código do Html deve ficar assim :

<HTML>
<HEAD>
<META NAME=“GENERATOR” Content=“Microsoft Visual Studio 6.0”>
<TITLE></TITLE>
</HEAD>
<BODY>
<!–“CONVERTED_APPLET”–>
<!-- CONVERTER VERSION 1.0 -->
<OBJECT classid=“clsid:8AD9C840-044E-11D1-B3E9-00805F499D93”
WIDTH = 400 HEIGHT = 400 codebase=“http://java.sun.com/products/plugin/1.2/jinstall-12-win32.cab#Version=1,2,0,0”>
<PARAM NAME = CODE VALUE = “Corrida.class” >

<PARAM NAME=“type” VALUE=“application/x-java-applet;version=1.2”>
<COMMENT>
<EMBED type=“application/x-java-applet;version=1.2” java_CODE = “Corrida.class” WIDTH = 400 HEIGHT = 400 pluginspage=“http://java.sun.com/products/plugin/1.2/plugin-install.html”><NOEMBED></COMMENT>

</NOEMBED></EMBED>
</OBJECT>

<!–
<APPLET CODE = “Corrida.class” WIDTH = 400 HEIGHT = 400 >

</APPLET>
–>
<!–“END_CONVERTED_APPLET”–>

<P>&nbsp;</P>

</BODY>
</HTML>

Espero ter ajudado.

Vou testar jaja posto a resposta :slight_smile:

Não funcionou o treco do A minusculo … estranho que eu tenho outro exercicio feito com ActionListener exatamente do mesmo jeitao e funciona … olha

[code]import java.awt.;
import java.awt.event.
;
import javax.swing.*;

public class Craps extends JApplet implements ActionListener
{
final int WON = 0, LOST = 1, CONTINUE = 2;
int iSomaDados = 0, iPontos = 0, iStatus = CONTINUE;
boolean firstRoll = true;

	JLabel dado1Label, dado2Label, somaLabel, pontosLabel;
	JTextField primeiroDado, segundoDado, soma, pontos;
	JButton roll;
	
	public void init()
	{
		Container c = getContentPane();
		c.setLayout( new FlowLayout() );
		
		dado1Label = new JLabel( "Dado 1" );
		c.add( dado1Label );
		primeiroDado = new JTextField( 10 );
		primeiroDado.setEditable( false );
		c.add( primeiroDado );
		
		dado2Label = new JLabel( "Dado 2" );
		c.add( dado2Label );
		segundoDado = new JTextField( 10 );
		segundoDado.setEditable( false );
		c.add( segundoDado );
		
		somaLabel = new JLabel( "Soma" );
		c.add( somaLabel );
		soma = new JTextField( 10 );
		soma.setEditable( false );
		c.add( soma );
		
		pontosLabel = new JLabel( "Pontos" );
		c.add( pontosLabel );
		pontos = new JTextField( 10 );
		pontos.setEditable( false );
		c.add( pontos );
		
		roll = new JButton( "Rolar Dado" );
		roll.addActionListener( this );
		c.add( roll );
	}
	
	public void ActionPerformed( ActionEvent e )
	{
		play();
	}
	
	public void play()
	{
		if ( firstRoll ) //primeira rolagem
		{
			iSomaDados = rollDice();
			
			switch ( iSomaDados )
			{
				case 7: case 11:
					iStatus = WON;
					pontos.setText( "" );
					break;
				
				case 2: case 3: case 12:
					iStatus = LOST;
					pontos.setText( "" );
					break;
				
				default:
					iStatus = CONTINUE;
					iPontos = iSomaDados;
					pontos.setText( Integer.toString( iPontos ) );
					firstRoll = false;
					break;
			}
		}
		
		else //caso seja segunda rolagem
		{
			iSomaDados = rollDice();
			
			if ( iSomaDados == iPontos )
				iStatus = WON;
			else 
				if ( iSomaDados == 7 )
				iStatus	= LOST;
		}
		
		if ( iStatus == CONTINUE )
			showStatus( "Role de novo." );
		else
		{
			if ( iStatus == WON )
				showStatus( "Jogador ganha. Clique em Rolar Dado para jogar de novo." );
			else
				showStatus( "Jogardor perde. Clique em Rolar Dado para jogar de novo." ) ;
				
			firstRoll = true;
		}
	}	
	
	public int rollDice()
	{
		int iDado1, iDado2, iSoma;
		
		iDado1 = 1 + ( int ) ( Math.random() * 6 );
		iDado2 = 1 + ( int ) ( Math.random() * 6 );
		iSoma = iDado1 + iDado2;
		
		primeiroDado.setText( Integer.toString( iDado1 ) );
		segundoDado.setText( Integer.toString( iDado2 ) );
		
		return iSoma;
	}

}[/code]

Fala LIPE

Cara, testei aqui em casa e basta voce retirar o abstract da sua classe :

public class Corrida extends JApplet implements ActionListener

e, onde ta public void ActionPerformed( ActionEvent e ) , passe o ActionPerformed para actionPerformed que funciona perfeitamente

Inteh mais.

Nephos, obrigado pela resposta, mas isso infelizmente não está funcionando.
Como pode reparar há outra classe muito parecida na mesma pasta e ele tem ActionListener e, quando compilo, ele não exige que a classe seja abstract. Isso só esta ocorrendo na classe Corrida :frowning:

LeoRocha, obrigado pela resposta.
Para testar esse código é só adicioná-lo na pagina HTML onde está o applet ou tenho que instalar o HTML Converter?

LIPE,

Basta adicionar o código a uma página HTML.
O HTMLConverter você utiliza apenas para gerar esse código.
A propósito…testei aqui e funcionou, inclusive com a alteração :

public void actionPerformed( ActionEvent e )

e a clase não sendo mais abstract.

Leonardo Rocha

Aqui não rolou com o códigot HTML também :frowning:

O que ta acontecendo no meu micro???

LIPE,
Tente gerar o seu próprio HTML então.
Pegue o seu .html antigo, o applet e o HTMLConverter.

Digite :

java HTMLConverter seuHTMLantigo.html

Confira o .html gerado e tente rodar.

Leonardo Rocha

Obrigado Leo, de noite vou tentar isso sim :slight_smile: