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

13 respostas
_fs

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

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 += ".";
		}
	}
}

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?

13 Respostas

mlopes

Ola,

PQ sua classe é abstract ???

[]'s

_fs

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

Rafael_Afonso

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.

L

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=“<a href="http://java.sun.com/products/plugin/1.2/jinstall-12-win32.cab#Version=1,2,0,0">http://java.sun.com/products/plugin/1.2/jinstall-12-win32.cab#Version=1,2,0,0</a>”>

<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=“<a href="http://java.sun.com/products/plugin/1.2/plugin-install.html">http://java.sun.com/products/plugin/1.2/plugin-install.html</a>”><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.

_fs

Vou testar jaja posto a resposta :slight_smile:

_fs

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

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;
		}
}
N

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.

_fs

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:

_fs

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?

L

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

_fs

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

O que ta acontecendo no meu micro???

L

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

_fs

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

Criado 12 de março de 2003
Ultima resposta 13 de mar. de 2003
Respostas 13
Participantes 5