Arret au bout d'un certain temps

gethy06
Arret au bout d'un certain temps

Salut a tous.
Voila, j'ai un petit soucis.
J'ai creer un programme en java qui lit ce qui se passe sur un port serie.
Sur ce port est connecté un flasheur, qui envoie les informations a certains moments de la journee.
Ces informations sont recuelli dans un fichier txt qui est envoyé soit au bout de 30 flashages, soit au bout de 30 minutes d'inactivité.
Sauf que voila, J'ai le programme qui s'arrete au bout d'1h30/2h malgres la boucle infini que j'ai mis.
Est ce normal?

fredericmazue

Quote:
Est ce normal?

Non. (Réponse proportionnelle au nombre de renseignements utiles que tu as donné pour qu'on t'aide)
gethy06

Voici ma boucle :

   while(true)
   {
       int i=0;
       String NomFile=com+"-"+dat+hour+min+sec+milsec;
       System.out.println("Nouveau fichier txt créé : "+NomFile);
       FileWriter txt = null;
       String titretxt="C:/flasheur/txt/"+NomFile+".txt";
       txt = new FileWriter(titretxt);
       PrintWriter pretxt = new PrintWriter(txt);
       pretxt.flush();
       //Attente de 30 min (le temps est en ms)
       serialPort.enableReceiveTimeout(1800000);
       System.out.println(dat+hour+min+sec+milsec);
       try
       {
           do
           {
               //pour lire avec des streams:
               in=new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
               int amount;
               String c="";
               do
               {
                   amount = in.read();
                   c+=DecToChar(amount);
               }while(DecToChar(amount)!="ETX");
              System.out.println(c);
              if(c.length()==38)
              {
                  String barcode=c.substring(19, 27);
                  pretxt.println("BARCODE="+barcode+";DATETIME="+dat+hour2+min2+sec2+milsec2);
                  pretxt.flush();
                  i++;
              }
              if(i==30)
              {
                  ok=false;
              }
              if(c.compareTo("STXCLOTURE_HILLSETX")==0)
              {
                  System.out.println("CLOTURE DE LA JOURNEE");
                  ok=false;
               }
            }while(ok);
            pretxt.close();
            System.out.println("Nouveau fichier BOUCHON créé : "+NomFile);
            FileWriter bch = null;
            String titrebch="C:/flasheur/txt/"+NomFile+".bouchon";
            bch = new FileWriter(titrebch);
            PrintWriter prebch = new PrintWriter(bch);
            prebch.flush();
            prebch.close();
            envoieFTP(NomFile);
            Properties sys = System.getProperties();
            String os = sys.getProperty("os.name");
            Runtime r = Runtime.getRuntime();
            try
           {
               r.exec("C:/flasheur/start.bat");
           }
           catch (IOException ex)
           {
               ex.printStackTrace();
           } 
           in.close();
       }
       catch(Exception f)
       {
           System.out.println("----Nouveau fichier BOUCHON créé : "+NomFile);
           FileWriter bch = null;
           String titrebch="C:/flasheur/txt/"+NomFile+".bouchon";
           bch = new FileWriter(titrebch);
           PrintWriter prebch = new PrintWriter(bch);
           prebch.flush();
           prebch.close();
           envoieFTP(NomFile);
       }
     }

Une petite question :
J'ai fais en sorte que le programme se lance au lancement d'une session windows grace à un .bat.
Ma question est : Apres verrouillage de la session, quand on se reconnecte a celle-ci, l'invite de cimmande est toujours presente mais le programme cess-t-il de fonctionner ?

fredericmazue

Quote:
Voici ma boucle

Pour ce qui est de donner des renseignements, tu as le sens du juste milieu :lol:

Quote:
J'ai fais en sorte que le programme se lance au lancement d'une session windows grace à un .bat.

Petit cachotier...

Te rends tu compte que ce que tu dis maintenant n'a aucun rapport avec la question à l'origine. :evil:
Quelles surprises tu nous réserves encore ? :lol:

Niroken

Quote:
Ma question est : Apres verrouillage de la session, quand on se reconnecte a celle-ci, l'invite de cimmande est toujours presente mais le programme cess-t-il de fonctionner ?

Tu peux deja regarder dans les processus actif si java.exe est en train de fonctionner ou non.
Ou alors tu lances ce petit bout de code : tu verrouilles ta session et tu te reconnectes : tu auras ta réponse:)

import java.lang.*;

public class TestExecJava
{
	public static void main(String[] args)
	{
		int i = 0;
		
		while(1 == 1)
		{
			try
			{
				Thread.sleep(1000);
				System.out.println("" + (i++));
			}
			catch (Exception e)
			{
				e.printStackTrace();
			}
		}
	}
}

Bonne chance
Niroken

fredericmazue

Salut Niroken :)

Quote:
while(1 == 1)

Puis je me permettre de suggérer que

 while(true)

serait une instruction beaucoup plus propre sur elle ?
Pourquoi faire un test dont on veut qu'il soit systématiquement vrai ?
Il est plus simple et direct de dire que la condition est vraie, tu ne crois pas ?
Niroken

Hello frederic, oui tu as raison, j'avoue j'ai
fait ca pour une obscure raison dont je ne me
rapelle plus trop "la subtilité" :D .

Mais effectivement un while(true) est plus propre.

Niroken