Openfile

oie galera…então eu criei uma aplicação offline…e essa é a minha classe de openfile:

[code]
public class openfile extends Command implements Runnable {

private MainCanvas canvas = null;

public boolean execute(MainCanvas main) {
	this.canvas = main;
	MainApplet.splash.setComponentValue("title", (String) parameters.elementAt(0));
    canvas.setSplash(MainApplet.SPLASH_MESSAGE);
	new Thread (this).start();
    return true;
}

public void run () {
	  String formLoad = (String) parameters.elementAt(1);

      for (int i = 2;i < parameters.size(); i++) {
          String parameter = (String) parameters.elementAt(i);
          Component comp = canvas.getCurrentForm().getComponentByName(parameter);
          
          if(comp!=null){
              GlobalVars.put(parameter, comp.getValue());
          }
          
          if(comp.getName().equals("Valor")){

          	String value = comp.getValue();
          	GlobalVars.put("Valor", value);
          }
      }
      
      if (canvas.getCurrentForm().checkFields()) {
		try {
		    canvas.load(formLoad);                
		} catch (SquareException e) {
		    GlobalVars.put("alertMsg", SquareException.getMessage(SquareException.GENERAL_ERROR));
	        canvas.load(MainApplet.getJadProperty("ALERT_SCREEN_FILE"));
		}
		return;
      }
      canvas.load(MainApplet.getJadProperty("ALERT_SCREEN_FILE"));
}

}[/code]

mas eu criei um dec e quando aperto o botão envés dele direcionar para a outra tela(um outro dec),ele dá erro:

Chamei o setError

alguém sabe me informar como eu resolvo?

Post o erro por favor.

mas só aparece isso:

ninguém sabe?:frowning:

Vc faz algum controle com esse return true; do seu método execute() ?

SIM

VAMOS VER SE AJUDA:

[code]
public class clearAllFields extends Command {

public boolean execute(MainCanvas canvas) {
	// TODO Auto-generated method stub
	System.out.println("[clearAllFields] IN");

	Form form = canvas.getCurrentForm();
	form.reset();
	
	System.out.println("[clearAllFields] OUT");
	canvas.refresh();

	return false;
}

}[/code]

[code]public class clearField extends ComponentCommand {

/* (non-Javadoc)
 * @see com.eversystems.mobile.js.ComponentCommand#execute(com.eversystems.square.Component)
 */
public String execute(Component component) {
    // TODO Auto-generated method stub
    String value = component.getValue();
    
    for (int i = 0; i < parameters.size(); i++) {
        value = Strings.clear(value, (String)parameters.elementAt(i));    
    }
    return value;
  
}

}[/code]

[code]
public class back extends Command {

public boolean execute(MainCanvas canvas) {
	Logger.getInstance().println("[back] execute --- IN");
	Context context = Context.getInstance();
	Form form = context.back();

	if (parameters.size() > 0) {
		String formLoad = (String)parameters.elementAt(0);

		if(canvas.getCurrentForm().getName().equals("_bCompras.dec")){
			GlobalVars.remove("reqOK");
		}
		
		canvas.load(context.back(formLoad));
		
	} else {
		canvas.load(form);
	}

	canvas.refresh();
	Logger.getInstance().println("[back] execute --- OUT");
	return true;
}

}[/code]

[code]public class close extends Command {
public boolean execute(MainCanvas canvas) {
canvas.closeApp();
return true;
}

}[/code]

SÃO TODAS AS CLASSES QUE TENHO POR ENQUANTO NO PROJETO

obs: o back tb não funciona…só permanece na mesma classe…e o avançar tb dá erro

Então perceba o seguinte.
Não sei se vc estudou Threads, mas basicamente, ela executa ‘paralelamente’ à outro ‘processo’ (não sei se posso chamar de processo).
Então, enquanto sua thread estiver sendo executada, seu método execute já ira ter retornado true.

Uma solução?

Talvez isso resolva.

Thread t = new Thread(this);
t.start();
t.join();
return true;

[quote=Lita Mclean]VAMOS VER SE AJUDA:

[code]
public class clearAllFields extends Command {

public boolean execute(MainCanvas canvas) {
	// TODO Auto-generated method stub
	System.out.println("[clearAllFields] IN");

	Form form = canvas.getCurrentForm();
	form.reset();
	
	System.out.println("[clearAllFields] OUT");
	canvas.refresh();

	return false;
}

}[/code]

[code]public class clearField extends ComponentCommand {

/* (non-Javadoc)
 * @see com.eversystems.mobile.js.ComponentCommand#execute(com.eversystems.square.Component)
 */
public String execute(Component component) {
    // TODO Auto-generated method stub
    String value = component.getValue();
    
    for (int i = 0; i < parameters.size(); i++) {
        value = Strings.clear(value, (String)parameters.elementAt(i));    
    }
    return value;
  
}

}[/code]

[code]
public class back extends Command {

public boolean execute(MainCanvas canvas) {
	Logger.getInstance().println("[back] execute --- IN");
	Context context = Context.getInstance();
	Form form = context.back();

	if (parameters.size() > 0) {
		String formLoad = (String)parameters.elementAt(0);

		if(canvas.getCurrentForm().getName().equals("_bCompras.dec")){
			GlobalVars.remove("reqOK");
		}
		
		canvas.load(context.back(formLoad));
		
	} else {
		canvas.load(form);
	}

	canvas.refresh();
	Logger.getInstance().println("[back] execute --- OUT");
	return true;
}

}[/code]

[code]public class close extends Command {
public boolean execute(MainCanvas canvas) {
canvas.closeApp();
return true;
}

}[/code]

SÃO TODAS AS CLASSES QUE TENHO POR ENQUANTO NO PROJETO[/quote]

E aonde ficou a classe que chama a Thread que vc postou antes?

fica aki oh:

[code]public class openfile extends Command implements Runnable {

private MainCanvas canvas = null;

public boolean execute(MainCanvas main) {
	this.canvas = main;
	MainApplet.splash.setComponentValue("title", (String) parameters.elementAt(0));
    canvas.setSplash(MainApplet.SPLASH_MESSAGE);
	new Thread (this).start();
    return true;
}

public void run () {
	  String formLoad = (String) parameters.elementAt(1);

      for (int i = 2;i < parameters.size(); i++) {
          String parameter = (String) parameters.elementAt(i);
          Component comp = canvas.getCurrentForm().getComponentByName(parameter);
          
          if(comp!=null){
              GlobalVars.put(parameter, comp.getValue());
          }
          
          if(comp.getName().equals("Valor")){

          	String value = comp.getValue();
          	GlobalVars.put("Valor", value);
          }
      }
      
      if (canvas.getCurrentForm().checkFields()) {
		try {
		    canvas.load(formLoad);                
		} catch (SquareException e) {
		    GlobalVars.put("alertMsg", SquareException.getMessage(SquareException.GENERAL_ERROR));
	        canvas.load(MainApplet.getJadProperty("ALERT_SCREEN_FILE"));
		}
		return;
      }
      canvas.load(MainApplet.getJadProperty("ALERT_SCREEN_FILE"));
}

}[/code]

sobre o que vc tinha dito eu tiro o

new Thread (this).start(); return true;

e coloco no lugar o

Thread t = new Thread(this); t.start(); t.join(); return true;
?
pq eu fiz isso só que dá erro e fala para fazer um try/catch…mas não adianta

[quote=Lita Mclean]fica aki oh:

[code]public class openfile extends Command implements Runnable {

private MainCanvas canvas = null;

public boolean execute(MainCanvas main) {
	this.canvas = main;
	MainApplet.splash.setComponentValue("title", (String) parameters.elementAt(0));
    canvas.setSplash(MainApplet.SPLASH_MESSAGE);
	new Thread (this).start();
    return true;
}

public void run () {
	  String formLoad = (String) parameters.elementAt(1);

      for (int i = 2;i < parameters.size(); i++) {
          String parameter = (String) parameters.elementAt(i);
          Component comp = canvas.getCurrentForm().getComponentByName(parameter);
          
          if(comp!=null){
              GlobalVars.put(parameter, comp.getValue());
          }
          
          if(comp.getName().equals("Valor")){

          	String value = comp.getValue();
          	GlobalVars.put("Valor", value);
          }
      }
      
      if (canvas.getCurrentForm().checkFields()) {
		try {
		    canvas.load(formLoad);                
		} catch (SquareException e) {
		    GlobalVars.put("alertMsg", SquareException.getMessage(SquareException.GENERAL_ERROR));
	        canvas.load(MainApplet.getJadProperty("ALERT_SCREEN_FILE"));
		}
		return;
      }
      canvas.load(MainApplet.getJadProperty("ALERT_SCREEN_FILE"));
}

}[/code]

sobre o que vc tinha dito eu tiro o

new Thread (this).start(); return true;

e coloco no lugar o

Thread t = new Thread(this); t.start(); t.join(); return true;
?
pq eu fiz isso só que dá erro e fala para fazer um try/catch…mas não adianta[/quote]

Ah sim, o join() precisa de tratamento de exceção.
É os mesmo erro que ocorre agora?

sim d á o mesmo erro,a única coisa q aparece no console é; Chamei o setError

e na tela do emulador aparece uma alert da mensagem q esta o meu systemMessages_pt_BR.txt:

MCanvas.ProblemasAplicContateResp=Problemas en la aplicación.|Contate el responsable.

[quote=Lita Mclean]sim d á o mesmo erro,a única coisa q aparece no console é; Chamei o setError

e na tela do emulador aparece uma alert da mensagem q esta o meu systemMessages_pt_BR.txt:

MCanvas.ProblemasAplicContateResp=Problemas en la aplicación.|Contate el responsable.[/quote]

Provavelmente ele deve estar lançando uma exceção.
Faz assim, em cada catch(), coloque um System.out.println(); com uma mensagem, ai vc sabe se ele entra na exceção ou não. Ou melhor, debuga :lol:

então, não sei se pode haver com o erro do openfile mas assim que o projeto começar a ser inicializado eel da um erro:

at com.sun.kvem.ScreenImpl.access$100(Unknown Source) at com.sun.kvem.ScreenImpl$DefaultDisplayUpdatePolicy.updateFace(Unknown Source) at com.sun.kvem.ScreenImpl.updateFace(Unknown Source) at com.sun.kvem.ScreenImpl.updateComponent(Unknown Source) at com.sun.kvem.ScreenImpl.access$100(Unknown Source) at com.sun.kvem.ScreenImpl$DefaultDisplayUpdatePolicy.updateFace(Unknown Source) at com.sun.kvem.ScreenImpl.updateFace(Unknown Source) at com.sun.kvem.ScreenImpl.updateComponent(Unknown Source) at com.sun.kvem.ScreenImpl.access$100(Unknown Source) at com.sun.kvem.ScreenImpl$DefaultDisplayUpdatePolicy.updateFace(Unknown Source) at com.sun.kvem.ScreenImpl.updateFace(Unknown Source) screenSettings: 240x320x220 at com.sun.kvem.ScreenImpl.updateComponent(Unknown Source)

mas abre o dec ‘normalmente’ coloquei System.out.println em todos os catch da o mesmo erro e no console da:

Chamei o setError Display no canvas Total : 1593

não sei debuga…mas vou tentar

apertando o botão para debug a única coia q eu reparei q aparece é uma classe…helper.class :?

http://www.guj.com.br/posts/list/41195.java

desculpa mas estou procurando pelo o que nesse site exatamente…o site esta dando erro…em algumas coisas q eu clico!!!

desconsidera essa pergunta…era para outro forum…:slight_smile:

então fiz o debug e pelo o que eu vi o erro é no MainCanvas e aparece o seguinte:

o que será?