Problemas num programa simples

6 respostas
J

Caros colegas programadores, estou desenvolvendo um programa simples, porém ele não roda como o esperado. Aqui está o código para que vc's tenham uma noção do que estou falando:

import java.applet.*;
import java.awt.*;

public class dialog extends Applet
{
	DialogFrame frame;
	Button button;

	public void init()
	{
		frame = new DialogFrame("DIALOG_FRAME");
		button = new Button("Abrir Janela");
		add(button);
	}

	public boolean action(Event evt, Object arg)
	{
		boolean visivel = frame.isShowing();
		if(visivel)
		{
			frame.hide();
			button.setLabel("Abrir Janela");
		}
		else
		{
			frame.show();
			button.setLabel("Fechar Janela");
		}
		return true;
	}
}

class DialogFrame extends Frame
{
	MenuBar menubar;
	Menu menu;
	MenuItem menuitem;
	Dialog dialog;
	TextField textfield;
	Button button;
	String	string;

	DialogFrame(String title)
	{
		super(title);

		menubar = new MenuBar();
		setMenuBar(menubar);
		menu = new Menu("Variáveis");
		menubar.add(menu);
		menuitem = new MenuItem("Dialog_Box");
		menu.add(menuitem);
		string = "	";
	}

	public void paint(Graphics g)
	{
		resize(300,250);
		g.drawString("O texto que você digitou:", 70, 100);
		g.drawString(string, 70, 120);
	}

	public boolean action(Event evt, Object arg)
	{
		if(evt.target instanceof MenuItem)
		{
			if(arg == "Dialog_Box")
			ShowDialogBox();
		}
		[b]else if(evt.target instanceof Button)
			if(arg == "Ok")
			{
				dialog.hide();
				repaint();
			}[/b]
		return true;
	}

protected void ShowDialogBox()
{
	dialog = new Dialog(this, "DIALOG_BOX", true);
	FlowLayout layout = new FlowLayout();
	dialog.setLayout(layout);
	dialog.resize(350, 200);

	button = new Button("Ok");
	dialog.add(button);
	textfield = new TextField(20);
	dialog.add(textfield);
	string = textfield.getText();

	dialog.show();
}
}

Eu acho que o erro está no bloco em negrito, mas não consigo achá-lo...
Peço que me ajudem...

[color="red"]*Editado: tópico movido para o fórum Java Básico (Iniciantes), e lembre-se de usar BBCode em suas mensagens no fórum. Jair Elton :joia:[/color]

6 Respostas

J

Qualquer objeto, inclusive String, é comparado usando o método equals(), == só funciona para tipos primitivos.

if(arg.equals("Ok"))
_

Opa, mais isso apenas se o objeto String for instanciado implicitamente como String.
ex: String s = new String(“Objeto String implícito”);

nesse caso, se usarmos == para comparar, ele não gera erro porém não traz o resultado esperado.

se a String for instanciada explicitamente, como
String s = “Objeto String explícito”;

usar o “==” vai funcionar corretamente.

nesse codigo, vai depender do que seja o “args” em questão.

exemplo

public class Teste {

public static void main(String[] args) {

String s1 = string símples; //string instanciadanão implicitamente como objeto

String s2 = new String(String args); //string instanciada implicitamente como objeto
//comparação de strings não instanciadas implicitamente como objeto
	if(s1 == " ")
		System.out.println("String igual a \" \"");
	
	else if(s1 == "string símples")
		System.out.println("String igual a \"string simples\"");
	
	System.out.println("---------------------------------------------");
	

           //comparação de strings instanciadas implicitamente como objeto
	if(s2 == " ")
		System.out.println(" ");
	
	else if(s2 == "String args")
		System.out.println("String igual a \"String args\"");
}

}

J

se a String for instanciada explicitamente, como
String s = “Objeto String explícito”;

usar o “==” vai funcionar corretamente.

Não há nenhuma garantia disso. == é usado para comparar conteúdo de variaveis, e para objetos, o conteúdo da variavel é uma referência, portanto == compara a referência, não o objeto em si, no caso da String, pode funcionar por causa do pool de Strings, mas não há garantias. Portanto, usar == para comparar objetos é completamente incorreto.

S

Existe algum motivo no mundo para se usar o construtor de String? Não consigo imaginar nenhuma situação onde se precise de uma cópia única.

_

Não é que não seja correto…
não é… digamos assim… aconcelhavel :roll:
pq, que funciona em strings daquela forma, funciona

J

É, na JVM da Sun (HotSpot).

Criado 24 de julho de 2007
Ultima resposta 26 de jul. de 2007
Respostas 6
Participantes 4