Problemas num programa simples

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:

[code]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();

}
}[/code]

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]

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

}

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

usar o “==” vai funcionar corretamente.[/quote]

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.

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

É, na JVM da Sun (HotSpot).