Objekt: Variablenübergabe



  • hi,

    ich versuch jetzt schon eine weile eine variable zu übergeben zw. 2 objecten aber das will nicht funktionieren...

    objekt1 berechnet einiges und ließt daten aus einer datei aus, diese werden dann in einem string s gespeichert.

    objekt2 soll lediglich String s übernehmen udn die enthaltenen daten ausgeben.

    wo liegt der trick dabei?

    vielleicht besser abstrahiert:

    class ABC {

    public String s = null;

    public obj1() { //einlesen aus datei ausgabe in String s }

    public void obj2() { //übernehme String s und gib ihn am Bildschirm aus}

    }

    Ich dachte erst es würde Return gehen aber da gibt der interpreter nur eine fehlermeldung aus...

    mfg



  • Ähm, wo ist das Problem?`:

    class Foo {
      private int x;  //Deine Variable
    
      public Foo() { x = 0; }
    
      //getter - und setter 
      public int getX() { return x; }
      public void setX(int x_) { x = x_; }  
    }
    
    class Bar {
      public Bar() { /*was auch immer du hier machen willst*/ }
    
      //Diese Methode arbeitet dann mit den übergebenen Daten
      public void process(int i) {
        System.out.println(i);
      }
    }
    
    Foo f = new Foo();
    f.setX(7);
    
    Bar b = new Bar();
    b.process(f.getX());
    

    Oder wie hattest du dir das vorgestellt?

    MfG

    GPC



  • hm, aber das sind doch 2 klassen... wie geht das wenn es in einer klasse weitergegeben wird? als funktion(methode) kann ich das nicht deklarieren was ich da habe.



  • public void print(Object obj) {
       system.out.println(obj.getX());
    }
    

    so?



  • ich versuch jetzt schon eine weile eine variable zu übergeben zw. 2 objecten aber das will nicht funktionieren...

    00Albert schrieb:

    hm, aber das sind doch 2 klassen...

    ja, das schriebst du ja auch, ich ging eben von 2 verschiedenen Klassen aus, meintest du die selbe Klasse und davon 2 Objektinstanzen?

    MfG

    GPC



  • da hab ich dann wohl die bezeichnungen verwechselt...

    import java.awt.*;
    import java.util.*;
    import java.awt.geom.*;
    import java.applet.Applet;
    import java.io.*;
    import java.util.Vector;
    import java.util.Set;
    
    public class Test_app2 extends Applet{
    
         //globale variablen
         public String s = null, a="a", sTMP=" ";   
         public String z = null;
         Vector vec = new Vector();
    
        public void init(){}
    
        public void start(){}
        public void stop(){}
        public void destroy(){}
    
        public void einlesen(){
          try {
                    BufferedReader in = new BufferedReader(
                                        new InputStreamReader(
                                        new FileInputStream( "daten.txt" )));
                    while( null != (s = in.readLine())) {
                        vec.add(s);
                        z 
                    }
                    in.close();
    
                    if(vec.size()>1) {
    
                        //String Aufspalten
                        String s1 = s. substring  ( 8,11 );
                        String s2 = s. substring  ( 12,16 );
                        String s3 = s. substring  ( 18,22 );
                        String s4 = s. substring  ( 24,28 );
    
                        s = " * text "+s1+" text "+s2+" text "+s3+" text "+s4 +"text";
                       sTMP=s;
                        System.out.println(sTMP);
                    }
    
                    s = sTMP;
                } catch(FileNotFoundException ex) {
                    vec.add(" ");
    
                    // Entfernt Dublikate
                    Set set = new HashSet(vec);
                    vec     = new Vector(set);
                    //System.out.println("datenn.txt defekt!");
                   }
          } 
        public void paint(Graphics screen){
         Graphics2D screen2D = (Graphics2D)screen;
         setBackground(Color.blue);
    
         Font f = new Font("Arial", Font.BOLD, 24);
        screen2D.setFont(f);
        screen2D.drawString("s= "+s, 175F, 100F);
        screen2D.drawString("z= "+z, 100F, 100F);
        screen2D.drawString("a= "+a, 20F, 100F);
          }
    
    }
    

    ich möchte das in der methode(?) einlesen der string s mit werten gefüllt wird und dann an paint übergeben wird das er da ausgegeben werden kann. ich das alles als normale anwendung schon geschreiben und das geht auch aber nun eben mal als applet.



  • Hi

    scheint ja richtig zu sein.

    nur in welcher reihenfolge werden die Methoden einlesen() und paint() aufgerufen? Kann es sein, das nur a ausgegeben wird? dann wird warscheinlich einlesen nicht aufgerufen. Bzw nach dem paint. schieb mal das fenster aus dem Monitorbereich, oder leg ein anderes Fenster drüber. Dadurch sollte ein neuzeichnen des applets ausgelöst werden. sollte danach die daten da sein. wied einlesen() zu späht aufgerufen.

    Oder setzt mal nen Breakpoint in deine Einlese Methode und schau nach ob dein prog da auch wirklich durchkommt.

    gruss



  • nun es sollte so sein, das erst eingelesen wird und dann paint durchläuft ... das soll dann zwar in zycklischen wiederholungen passieren aber das muß ich mir später wohl mal überlegen wie das gehen könnte.

    ausgabe is: a=a,z=null,s=null das bedeutet, das nichts übergeben wurde.

    wie legt man die reihenfolge fest was wann aufgerufen wird? ichd achte das was oben steht kommt zu erst dran...



  • Hi

    ähm ja.

    in welcher reihenfolge du deine methoden in deiner datei implementierst is egal, solange sie inerhalb der klasse liegen. Die aufrufreihenfolge ergibt sich aus dem quelltext. bzw aus dem programm selber, nicht daraus, in welcher reihenfolge die Methoden inerhalb einer klasse abgelegt werden.

    da du von Applet ableitest, gibt es jede menge code den du davon erbst. dieser gibt zum teil den ablauf deines Programmes vor. Dazu gehört z.B. das du die Methoden init() start() stop() destroy() implementieren musst/ kannst ( auch wenn sie nur lehr sind), da der geerbte code diese Methoden aufruft. paint() gehört auch dazu. Wenn du jetzt z.B. in init() deine Methode einlesen aufrufst, könnte dann schon wieder alles funktionieren.

    gruss



  • ja das ist es gewesen 🙂 immer diese details ... zumindestens erscheint jetzt wie gewünscht die ausgabe...

    kann man eigentlich aus einem applet aus eine ausgabe in die konsole geben? weil ich hab da noch eine kontrollausgabe des strings aber halt für die konsole, weil es etwas unpraktisch ist das auch im applet abgebildet zu haben.



  • Hi,

    ich hab mal eine frage ist es normal, das solch ein applet aus unerfindlichen gründen den cpu(3,2Ghz) um 50% auslastet?

    Ich hab versucht eine wiederholung einzubauen bzw. mittel sleep(1000) eine pausierung des vorganges... aber das funktioniert nicht, bzw. zeigt mir das applet immer nur die erste ausgabe an aber ohen die werte zu übernehmen "s1,s2,s3,s4,s5".

    Außerdem läßt sich das applet nur im editor ausführen via browser geht es garnicht.
    Im editor hab ich unten im statusfenster die übliche ausgabe wie aus dem ursprünglichen programm aber auch ohne sleep verzögerung.

    repaint hab ich verschiedentlich aufrufen wollen aber das brachte kein ergebnis.

    diese bildeinfüge funktion die ich ausprobieren wollte zeigt auch kein bild an auchwenn das dort liegt wo auch das applet ist.

    vielleicht hat ja jemand eine idee dazu.

    import java.awt.*;
    import java.util.*;
    import java.awt.geom.*;
    import java.applet.*;
    import java.io.*;
    import java.util.Vector;
    import java.util.Set;
    import java.text.SimpleDateFormat;
    
    public class Test_app2
                extends java.applet.Applet
    {
        //globale-klassen variable
        public String s, sTMP, s1, s2, s3, s4;
        Image img;
        Vector vec = new Vector();
        SimpleDateFormat zeitstempel = new SimpleDateFormat();
    
        public void init(){
            String s = null, sTMP=" ";
            Image img;
            img = getImage(getDocumentBase(),"Bild.jpg");
    
            // Angepasstes Datum, Zeit
            zeitstempel.applyPattern( "dd.MM.yyyy * HH:mm:ss" );
    
            einlesen();
    
        }
    
        public void einlesen(){
            // Lies Textzeilen aus der Datei in einen Vector:
            try {
                  Thread.sleep(1000);  //5min=300.000ms
                } catch (InterruptedException ex) {}
    
            try {
                BufferedReader in = new BufferedReader(
                                        new InputStreamReader(
                                            new FileInputStream( "wetterdaten.txt" )));
                while( null != (s = in.readLine())) {
                    vec.add(s);
                }
                in.close();
            } catch(FileNotFoundException ex) {
                vec.add(" ");
    
                // Entfernt Dublikate
                Set set = new HashSet(vec);
                vec     = new Vector(set);
                System.out.println("wetterdaten.txt defekt!");
    
            } catch(Exception ex) {
                System.out.println( ex );
            }
    
            s = vec.lastElement().toString();
            System.out.println("Sytem aktiv");
    
            if(vec.size()>1) {
    
                //String Aufspalten
                String s1 = s. substring  ( 8,11 );
                String s2 = s. substring  ( 12,16 );
                String s3 = s. substring  ( 18,22 );
                String s4 = s. substring  ( 24,28 );
    
                s = zeitstempel.format(new Date())+" * Windrichtung "+s1
                    +"° * Windgeschwindigkeit "+s2+"m/s * Temperatur "
                    +s3+"°C * Luftfeuchte "+s4+"% *";
    
                sTMP=s;
                System.out.println(sTMP);
            }
    
            s = sTMP;
    
        }
    
        public void paint(Graphics screen){
            Graphics2D screen2D = (Graphics2D)screen;
            setBackground(Color.white);
    
            Font f = new Font("Arial", Font.BOLD, 12);
            screen2D.setFont(f);
    
            screen2D.setColor(Color.black);
            screen2D.drawString(zeitstempel.format(new Date()), 100F, 100F);
    
            screen2D.setColor(Color.blue);
            screen2D.drawString("Windrichtung "+s1+"°", 100F, 120F);
    
            screen2D.setColor(Color.blue);
            screen2D.drawString("Windgeschwindigkeit "+s2+"m/s", 100F, 130F);
    
            screen2D.setColor(Color.blue);
            screen2D.drawString("Temperatur "+s3+"°C", 100F, 140F);
    
            screen2D.setColor(Color.blue);
            screen2D.drawString("Luftfeuchte "+s4+"%", 100F, 150F);
    
            screen2D.drawImage(img, 20,20, this);
    
        }
    
    }
    

Anmelden zum Antworten