Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Java » Appletproblem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
19.07.2003, 20:10 Uhr
worst_case



Hi,

ich habe mir zwei Applets geschrieben. Ein Applet liest zyklisch von einer Datei am Server Werte (Zeilen) ein. Das zweite Applet nicht einen Wert (je nach Aufrufparameter) und stellt diesen dar.

Wenn ich diese Seite mehrmals ca. 3-5 mal neu lade (F5) dann hängt sich Mozilla auf (Konqueror zeigt mir an das mehr Applets geladen sind als auf der Page vorhanden)
Ich habe das Gefühl das

1. beim wechseln der Seite die Applets nicht vernichtet werden
2. Applets die noch laufen nicht wiederverwendet werden, sondern neu
erzeugt werden.

Hier mal der Code vom Applet das eine Datei einliest.


C++:
import java.applet.*;
import java.net.*;
import java.io.*;
import java.lang.*;
import java.text.*;
import java.awt.*;

        public class server extends Applet implements Runnable
        {
                public BufferedReader stream;
        private int status = 0;
        private int anzahl;
            private int[] variable = new int[200];
                private int refresh;
        private String DataFile;
        private Label ausgabe;
        Thread t;
        boolean running;

//############################################################################

                public void start()
                {
                        if (t == null)
                           {
                           running = true;        
               t = new Thread(this);
                           t.start();
                           }
                }

//############################################################################

        public void stop()
                {
                        if (t != null)
                           {
                            running = false;
                t = null;
                           }
                }

//############################################################################

                public void run()
                {

                        while(running)
                        {
                                try
                                  {
                                   Thread.sleep(refresh);
                                   readData();

                   status++;

                    switch (status)
                         {
                     case 1: {ausgabe.setText("|"); break;}
                     case 2: {ausgabe.setText("||"); break;}
                     case 3: {ausgabe.setText("|||"); break;}
                     case 4: {ausgabe.setText("||||"); break;}
                     case 5: {ausgabe.setText("|||||"); break;}
                     case 7: {ausgabe.setText("||||||"); status = 0; break;}
                     default: {ausgabe.setText(" "); ausgabe.setText("|"); status = 1; break;}
                     }

                   }
                   catch (Exception e)
                                    {
                                    
                                    }
                //            showStatus (Integer.toString(refresh));
            }
                }


//############################################################################

                public void init()
             {
                     String param;

                     param = getParameter("refresh");
               if ( param != null )
                  {
              refresh = (Integer.parseInt(param)) * 1000;   // Zeit in Millisekunden
                  }
               else
                  {
              refresh = 2000;          // default 2 sekunden
              }

                    
             DataFile = getParameter("datafile");
            
            ausgabe = new Label();
            setLayout (new BorderLayout());
                    add (BorderLayout.CENTER , ausgabe);
                    }

//############################################################################

        public void readData() throws IOException
                     {
             String line;
                      URL adr = new URL(getDocumentBase() , DataFile);
               BufferedReader stream = new BufferedReader (new InputStreamReader(adr.openStream()));

                            anzahl = 0;

            while ((line = stream.readLine()) != null)
                {
                anzahl++;
                variable[anzahl] = Integer.parseInt(line);
                    }

               stream.close();
              }

//############################################################################

        public int slaveData(int nr) throws IOException
                     {
              return variable[nr];
             }
        }


Danke
worst_case

-- Edit: code-tags eingefügt.

Dieser Post wurde am 20.07.2003 um 14:52 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.07.2003, 10:26 Uhr
Spacelord
Hoffnungsloser Fall


Hab das Ganze nur mal überflogen,aber irgendwie stösst mir die Anweisung t=null; in deiner stop() Methode sauer auf.
Kommentier die mal aus und probier es dann nochmal.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.07.2003, 11:06 Uhr
typecast
aka loddab
(Operator)


@ Spacelord: Also das mit dem t=null ist die normale Methode einen Thread zu beenden. Bei mir funktioniert das immer einwandfrei.

@worst_case: Also ich hab mir den Code angesehen und kann keine Fehler finden. Ich denke, dass da der Browser nicht richtig funktioniert. Was anderes kann ich mir nicht vorstellen. Schau mal ob bei anderen Seiten mit Applets das gleiche Problem auftritt.
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.07.2003, 15:38 Uhr
Spacelord
Hoffnungsloser Fall


Der Thread wird doch schon dadurch beendet dass running=false gesetzt wird.
Wenn in der Schleifenbedingung nicht T!=null abgefragt wird ist t=null doch ansich überflüssig.
Ich halte es aber für bedenklich wenn das Objekt des (noch) laufenden Threads dem GC zum Frass vorgeworfen wird.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.07.2003, 18:11 Uhr
worst_case



Hallo miteinander,

@spacelord: wie kann ich es anders machen.

Ich habe auf meine Page mehrere Applets. Wenn ich die Seite wechsle dann muss ich doch die applets löschen, obwohl manchmal die selben (andere Parameter) applets auf einer anderen Seite ebenfalls sind ?
Der Browser (Intranet) wird vermutlich !!nie!! geschlossen, bekomme ich dann nicht immer neue Applets hinzu ?

Danke
worst_case (Greenhorn)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.07.2003, 15:23 Uhr
typecast
aka loddab
(Operator)


Nein im Grunde musst die Applets nicht löschen. Das übernimmt der normalerweise der Browser für dich. Versuch mal die Threads mit der interrupt-methode zu stoppen. wenn es dann nicht funktioniert, dann probier noch die isinteruppted-methode aus. wenn sie true zurückliefert, dann kannst du ja noch einmal die zeile mit t=null versuchen.
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
23.07.2003, 19:14 Uhr
worst_case



Abend,

hier fangen die spanischen Dörfer an.
Ein Stück Code wäre nicht schlecht.

worst_case
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
23.07.2003, 21:37 Uhr
Spacelord
Hoffnungsloser Fall



C++:
public void run()
{
     while(! isInterrupted())
     {
          // do something
          try
          {
              Thread.sleep(800);
          }
          catch(InterruptedException e)
          {
              interrupt();//wichtig!
          }
      }
}



etwa so sollte es aussehen,und in deiner stop methode t.interrupt(); zum beenden.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
24.07.2003, 17:02 Uhr
worst_case



Hallo,

danke für das Beispiel.

In meine "run" ist jetzt klar.
Mein "start" bleibt dann so ?
Und in "stop" dann nut t.interrupt() ?

Bitte um kurze Bestätigung
worst_case
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
24.07.2003, 17:53 Uhr
Spacelord
Hoffnungsloser Fall


Yep,
start() kann so bleiben und in stop nur t.interrupt();.
Mit Applets kenn ich mich nicht aus aber vom Standpunkt des Threads aus ist dann alles o.k.

PS: Die Art den Thread über interrupt zu beenden bietet sich bei dir an weil du sleep in deiner run-Methode nutzt!

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ Java ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: