Openfile

28 respostas
L

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

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

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?

28 Respostas

V

Post o erro por favor.

L

mas só aparece isso:

L

ninguém sabe?:frowning:

J

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

L

SIM

L
VAMOS VER SE AJUDA:
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;
	}

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

}
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;
	}
}
public class close extends Command {
    public boolean execute(MainCanvas canvas) {
        canvas.closeApp();
        return true;
    }

}

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

L

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

J

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;
J
Lita Mclean:
VAMOS VER SE AJUDA:
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;
	}

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

}
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;
	}
}
public class close extends Command {
    public boolean execute(MainCanvas canvas) {
        canvas.closeApp();
        return true;
    }

}

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

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

L

fica aki oh:

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"));
    }
}
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
J
Lita Mclean:
fica aki oh:
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"));
    }
}
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

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

L

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.

J

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.

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:

L

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

L

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

J

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

L

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

L

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

L

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

o que será?

J

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

o que será?

Se puder, poste o código do MainCanvas

L

oh o código:

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);
        Thread t = new Thread(this);    
        t.start();    
        try {
			t.join();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}    
        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"));
    }
L

no debug não sai dessa parte;

this.canvas = main; MainApplet.splash.setComponentValue("title", (String) parameters.elementAt(0));

então acredito q o erro esteja aki

J

Lita Mclean:
no debug não sai dessa parte;

this.canvas = main; MainApplet.splash.setComponentValue("title", (String) parameters.elementAt(0));

então acredito q o erro esteja aki

Não não, quis o código da classe MainCanvas msm, ou ela não é sua?
E de onde essa MainApplet?

ta bem confuso. vc que fez ou pegou pronto??

L

então aki no meu serviço…como eu ainda ‘não consigo programar’ eu fico na parte só de fazer dec e xsl…entendeu?
e como surgiu um projeto novo e os meninos estão com muitas coisas…um criou o projeto p/ mim apenas com asseguintes classes:

back.java clearAllFields.java clearField.java close.java openfile.java

fiz os decs mas percebi que não funcionava o openfile sendo assim eu não conseguia ir de um dec para outro…mas flaram para eu tentar resolver sozinha…e é o q eu estou fazendo…mas estou mais perdida do q cego em tiroteio…

e não tem a classe MainCanvas

J

Lita Mclean:
então aki no meu serviço…como eu ainda ‘não consigo programar’ eu fico na parte só de fazer dec e xsl…entendeu?
e como surgiu um projeto novo e os meninos estão com muitas coisas…um criou o projeto p/ mim apenas com asseguintes classes:

back.java clearAllFields.java clearField.java close.java openfile.java

fiz os decs mas percebi que não funcionava o openfile sendo assim eu não conseguia ir de um dec para outro…mas flaram para eu tentar resolver sozinha…e é o q eu estou fazendo…mas estou mais perdida do q cego em tiroteio…

e não tem a classe MainCanvas

Hmm, sem essas classes fica mais difícil de achar o problema.

L

j0nny…primeiramente me desculpa pelo incomodo…e consegui o problema estava nessa linha:

ele é um vetor sendo assim sua inicialização é 0.

agora sim esta funcionando!!..hehe

orbigada

J

Lita Mclean:
j0nny…primeiramente me desculpa pelo incomodo…e consegui o problema estava nessa linha:

ele é um vetor sendo assim sua inicialização é 0.

agora sim esta funcionando!!..hehe

orbigada

No problem.
Estamos aqui pra isso :thumbup:

L

:slight_smile:

Criado 8 de março de 2010
Ultima resposta 10 de mar. de 2010
Respostas 28
Participantes 3