Avatar billede badal Nybegynder
07. november 2003 - 15:53 Der er 12 kommentarer og
1 løsning

Håndttering af exception/RMI

Jeg har lige en spørgsmål her. Jeg benytter RMI og det som jeg godt vil tage højde for er hvis der ikke kan connect til rmi serveren så bliver der kastet en exception og programmet går ned. Jeg vil godt have at programmet ikke går ned men istedet gemmes til en fil. Hvorhen det så kan indlæses igen.

import java.rmi.Naming;
import java.rmi.*;
import java.rmi.server.*;

public class Test
{
    private String STRhost="localhost";
   
    private Server server;
       
    public parseSMS() throws Exception
    {
        server = (Server) Naming.lookup ("rmi://" + STRhost + "/Server");
    }
   
    public void parse(String S1, String S2)
    {
        try
        {
            server.ServerParseS(S1, S2);
        }
        catch (Exception ex)
        {
            System.out.println(ex);
        }
    }
}
Avatar billede arne_v Ekspert
07. november 2003 - 16:16 #1
Hvad er spørgsmålet ?

Du bør få en exception hvis du ikke kan få forbindelse og den
kan du catche - som din kode sketch allerede viser.
Avatar billede badal Nybegynder
07. november 2003 - 21:53 #2
Jeg fik ikke formuleret det godt nok i første omgang. Det jeg ønsker at hvis der sker en undtagelse så skal S1 og S2 gemmes til en fil eller noget lign. De gemte data fra filen skal så indlæses igen og forsøgt sendt igen med          server.ServerParseS(S1, S2). Så jeg ville høre om der var andre smarte måder at gøre det på. Jeg havde forestille mig at gemme til enten en xml fil eller en almindelig tekste fil. Og et andet ting er hvordan kan jeg være sikker på at dataerne kun bliver indlæst en gang?
Avatar billede arne_v Ekspert
07. november 2003 - 22:45 #3
Den simple løsning var vel:
  i catch blokken åbner du fil og skriver 2 linier til den og lukker pænt ned
  i opstart læses filen ind og processes før noget andet

Hvis du ikke vil lukke programmet ned men forsøge at reconnecte så bliver
det mere kompliceret. Det er rimeligt simpelt at periodisk læse filen
og forsøge at connecte, hvis man ikke skal lave andet samtidigt. Men hvis
du vil lave andet samtidigt skal du have en separat tråd til dette
og der skal laves synkronisering mellem skrivning og læsning til filen.

Umiddelbart tror jeg ikke at du vil vinde noget ved XML (data er ikke så
strukturerede).
Avatar billede badal Nybegynder
08. november 2003 - 00:51 #4
Tak for svaret det virker meget fornuftigt. Lige en sidste ting før du får pointene. Hvordan kan jeg sikre mig at filen bliver kun indlæst en gang? Jeg har tænkt mig at når programmet lukker ned og startes op igen at filen skal indlæses. Vil det være fornuftigt at læse filen og derefter slette den. Fordi hvis der stadig ikke kan connectes så vil dataerne igen blive gemt i en fil og dermed ikke går tabt.
Avatar billede arne_v Ekspert
08. november 2003 - 09:31 #5
Ja - det var vel det nemmeste - at slette filen når den er læst ind.
Avatar billede badal Nybegynder
12. november 2003 - 00:45 #6
Hvordan kan jeg slette en fil? Når filen feks. ligger i folderen c:\test\test.txt
Avatar billede badal Nybegynder
12. november 2003 - 07:45 #7
Fand ud af det selv.    
File f = new File("C:/LogfilError.txt");
f.delete();
Avatar billede arne_v Ekspert
12. november 2003 - 07:51 #8
Du kan skrive det som:

(new File("C:/LogfilError.txt")).delete();
Avatar billede badal Nybegynder
12. november 2003 - 10:49 #9
Jeg har forsøgt at slette filen, men den kan ikke slettes hvis jeg ligger den inde i try statement. Men virker gerne hvis jeg lægger den før try statement(der hvor den er markeret ud). Hvorfor vil den ikke det? Det andet spørgsmål som jeg har er at den klager over den her statement: BoolDeleted = java.lang.Boolean.TRUE;
boolean in parse cannot be applied to java.lang.boolean. Hvis jeg så istedet for ændre Booldeleted = true; så klager den over at required java.lang.boolean. Found: boolean

public void ReadFromFile()
    {
        //("C:/LogfilError.txt"));
        try
        {
              BufferedReader ind = new BufferedReader(new FileReader("C:/LogfilError.txt"));
            String linie = ind.readLine();
           
            (new File("C:/LogfilError.txt")).delete();
               
              while (linie != null)
              {
                try
                {
                    StringTokenizer SeperateEachWord = new StringTokenizer(linie, "#");
                    String S1 = SeperateEachWord.nextToken();
                    Boolean BoolDeleted;
                     
                      if (SeperateEachWord.nextToken().equals("true"))
                          BoolDeleted = java.lang.Boolean.TRUE;
                      else
                          BoolDeleted = java.lang.Boolean.FALSE;
                 
                      /*Kalde java funktion*/
                      parse(S1, BoolDeleted);
                  }
                catch (Exception u)
                {
                      System.out.println("Error. Didn't Read the line.");
                      u.printStackTrace();
                }
                linie = ind.readLine();
              }
        }
        catch (FileNotFoundException u)
        {
              System.out.println("Unable to find the file");
        }
        catch (Exception u)
        {
              System.out.println("Error Reading file.");
              u.printStackTrace();
        }
      }
Avatar billede arne_v Ekspert
12. november 2003 - 11:09 #10
Du er nok nød til at lukke filen inden du kan slette den.
Avatar billede arne_v Ekspert
12. november 2003 - 11:11 #11
boolean BoolDeleted; /* boolean med lille start */

BoolDeleted = true;
BoolDeleted = false;
Avatar billede badal Nybegynder
12. november 2003 - 13:07 #12
arne: Det var lige det som var problemet. Jeg ville gerne have givet point men du har besvaret spørgsmålet som kommentar. Så er det vel ikke muligt at give point?
Avatar billede arne_v Ekspert
12. november 2003 - 13:53 #13
Så ligger jeg et svar !

:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester