Variablen Classübergreifen abfragen

Status
Nicht offen für weitere Antworten.

totix800

Mitglied
Hi,

Wenn ich das bis jetzt richtig verstanden habe, dann kann ich mit public static int value; Variablen einrichten, die classübergreifend zu erreichen sind oder?

Mein problem ist folgendes. Ich bin Java Anfänger und versuche Grade eine Arbeit auf 2 Classes zu verteilen. In einer Class sollen die daten ermittelt werden (welche is momentan ja unwichtig), diese sollen in der Variable der anderen Class zur Verfügung gestellt werden. Wenn ich nich total am ganzen Aufbau von classes vorbei schieße hoffe ich das ihr mir helfen könnt.

Vorweg mal der Code der die Daten ermitteln soll. Der ließt den Grünwert aus Pixeln von Bildern, die kontinuirlich mit ner Webcam geschossen werden (grab.class):
Code:
package grabber;

import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;
import javax.media.*;
import javax.media.control.*;
import javax.media.format.*; 
import javax.media.util.*;
import com.sun.image.codec.jpeg.*;
import com.sun.media.protocol.v4l.DataSource;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.media.Buffer;
import javax.swing.JFrame;
import icommand.nxt.Sound;
import icommand.nxt.comm.NXTCommand;
import icommand.nxt.*;


import javax.imageio.ImageIO;
import grabber.gui.*;

/**
 *
 * @author toti
 */
public class grab {
 
    
public static int test = 0; 
    /** Creates a new instance of grab */
    public grab(String [] args)  throws Exception{
            
          // Device festlegen
        CaptureDeviceInfo deviceInfo = CaptureDeviceManager.getDevice("v4l:Logitech QuickCam EC:0");
        if(deviceInfo == null)
        {
            System.out.println("no device found");
        }
        Player player = Manager.createRealizedPlayer(deviceInfo.getLocator());
        player.start();
 
        // Kurz warten, soll sonst angeblich lags bringen
        Thread.sleep(2500);
        System.out.println("Wait: End");

        JFrame frame = new JFrame("Display");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(20,20,320,240); // position bleibt dir überlassen, höhe und breite kannst du der größe der bilder anpassen
        frame.getContentPane().add(player.getVisualComponent());
        frame.setVisible(true); 
        		
            
          
        
        while(true)
        {
            // FrameGrab
            FrameGrabbingControl frameGrabber = (FrameGrabbingControl)player.getControl("javax.media.control.FrameGrabbingControl");
            Buffer buf = frameGrabber.grabFrame();

            // Als Bild in en Buffer schieben
            Image img = (new BufferToImage((VideoFormat)buf.getFormat()).createImage(buf));
            BufferedImage buffImg = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
            Graphics2D g = buffImg.createGraphics();
            g.drawImage(img, null, null);

            
            int left1 = buffImg.getRGB(100, 110);
		Color leftc1 = new Color(left1);
                
                System.out.println("test");
                if(leftc1.getGreen() < 20)
                {
                    test = 1;
                }

                
                if(leftc1.getGreen() > 20)
                {
                    test = 0;
                }
        
    }
    }
}


Als zweites die Class, die die erzeugten Daten aus der Variable auslesen und in der Cionsole wiedergeben soll:
Code:
package grabber;

import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;
import javax.media.*;
import javax.media.control.*;
import javax.media.format.*; 
import javax.media.util.*;
import com.sun.image.codec.jpeg.*;
import com.sun.media.protocol.v4l.DataSource;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.media.Buffer;
import javax.swing.JFrame;
import icommand.nxt.Sound;
import icommand.nxt.comm.NXTCommand;
import icommand.nxt.*;

import javax.imageio.ImageIO;
import grabber.gui.*;
import grabber.grab;



 
/**
 *
 * @author Google, NetBeans
 */
public class Main 
{ 
    
    public static void main(String [] args) throws Exception
    {
     while(true)
     {
         System.out.println(grab.test);   
     }
    }
}

Das funktioniert auch insoweit, dass ich den Anfangswert der Variable kontinuirlich angezeigt bekomme (000000000...) Da ich nur Nullen bekomme bin ich mir sicher, dass die if schleifen aus dem ersten Code garnicht ausgeführt werden. Wie bekomm ich das nun hiin, dass Code eins die Sachen auswertet, sie in der Variable speichert und Code 2 sie sich abholt und mir ausgibt. Ist das ansatzweise richtig oder bin ich total auf dem Holzpfad.

Danke schon einmal.


[/code]
 

happy_robot

Bekanntes Mitglied
Hi,

statics sollte man nur implementieren wenn es darum geht die eindeutigkeit einer variable (oder klasse -> singleton) zu garantieren. stell dir zum beispiel vor du willst wissen wieviele instanzen einer bestimmten klasse bereits instanziiert wurden. dafür legt man dann innerhalb der klasse einen static-int an und zählt diesen im konstruktor einfach hoch. da es immer derselbe ist (da er ja nicht über den t h i s-"zeiger" referenziert wird) garantiert dies die eindeutigkeit.

des weiteren sollten zugriffe aus statics immer über synchonisierte statische methoden erfolgen (synchronized), wenn es nicht unbedingt um performance geht. bei non-statics ists bei gutem design nur die klasse selber, bei statics kann es jeder zu jeder zeit machen.

sich mit statics einen einfachen zugang zu daten zu verschaffen ist keine gute idee.

besser wäre es wenn du der klasse die die daten braucht eine referenz der klasse übergibst die die daten liefert. sozusagen eine referenz des "daten-servers". wenn du dieses dann in form eines interfaces machst kannst du jederzeit auch einer anderen klasse die fähigkeit eines solchen "servers" verleihen.
 

totix800

Mitglied
Ich glaube ich habe das ganze Class Sache falsch angepeilt. Was ich eigendlich brauche suche ist eine Möglichkeit wie ich 2 Tasks/Threads gleichzeitig laufen lassen kann und unter den Tasks informationen über Variablen austauschen kann. Dabei hab ich die Class geschichte wohl falsch eingeschätzt.
Kann mit denn viielleicht jemand erklären, wie ich es mache, dass ich 2, später auch merh Aufgaben Abfolgen gleichzeitg ausführe und unter denen dann Daten über Varibalen austausche. Bin leider Anfänger.
 

happy_robot

Bekanntes Mitglied
Schau dir mal die klasse "Thread" und das Interface "Runnable" an.
allerdings ist das was du da vor hast nicht unbedingt für anfänger geeignet.
 

Marco13

Top Contributor
Ähm - das Hauptproblem hast du wohl schon selbst erkannt: Er bleibt einfach in der while-Schleife in der main hängen. Es wird ja nirgendwo ein Grab-Objekt erstellt. (Klassennamen schreibt man Groß!!!)

Du bräuchstest dafür wohl zwei Threads, und das ist mit Java garnicht mal sooo kompliziert. Du könntest im einfachsten Fall sowas machen
Code:
class Grab
{
    private int test = 0;

    public Grab(...)
    {
          // Device festlegen
         CaptureDeviceInfo deviceInfo =
          ...
         frame.setVisible(true); 


         // Das hier ist ein Ersatz für die While-Schleife, die jetzt in einen eigenen Thread kommt
         Thread t = new Thread(new Runnable()
         {
              public void run()
              {
                   while (true)
                   {
                       doGrab();
                   }
               }
          });
          t.start();
     }


      // Hier steht das drin, was vorher in der while-Schleife stand
     private void doGrab()
     {
          // FrameGrab
          FrameGrabbingControl frameGrabber = 
           ....
          test = xxx....
      }


       public  int getTest() { return test; }
}

und in der main dann sowas
Code:
public class Main
{
   
    public static void main(String [] args) throws Exception
    {
     Grab grab = new Grab();
     while(true)
     {
         System.out.println(grab.getTest());   
     }
    }
}
 

happy_robot

Bekanntes Mitglied
Marco13 hat gesagt.:
Du bräuchstest dafür wohl zwei Threads, und das ist mit Java garnicht mal sooo kompliziert.
kompliziert ist die erstellung der threads im ersten moment nicht. allerdings sind dead-locks, race-conditions und synchronisierung mittels semaphoren nicht unbedingt was für den anfang. und im genannten beispiel kannst du nicht mal garantieren daß der thread sauber beendet wird.
 

Marco13

Top Contributor
Öh. Das nicht. Aber man kann garantieren, dass er NICHT sauber beendet wird. So ist das eben mit "whilte(true)" :lol:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
T Variablen Java Basics - Anfänger-Themen 1
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
M Aufsummieren von variablen Wertegrößen Java Basics - Anfänger-Themen 17
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
ashi Variablen aufrufen Java Basics - Anfänger-Themen 17
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
C Konstruktoren und Variablen Java Basics - Anfänger-Themen 42
F Auf Variablen eines Konstruktors zugreifen Java Basics - Anfänger-Themen 4
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
Arif Vererbung Methodenvererbung mit finalen Variablen Java Basics - Anfänger-Themen 1
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
S Variablen Variablen in einer Schleife erstellen lassen Java Basics - Anfänger-Themen 11
J Ich brauche Hilfe bei einem Code (Variablen speichern) Java Basics - Anfänger-Themen 29
F Variablen Werte einer Klasse überschreiben Java Basics - Anfänger-Themen 4
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22
M Java Instanz-Variablen ? Java Basics - Anfänger-Themen 3
B Variablen von Methoden übertragen Java Basics - Anfänger-Themen 2
M Variablen umbenennen Java Basics - Anfänger-Themen 1
T Körper Brechnung - Lokale Variablen in Methoden übergeben Java Basics - Anfänger-Themen 10
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
mars90 Fehler in der Variablen Deklaration Java Basics - Anfänger-Themen 8
E Variablen in formatierter Ausgabe Java Basics - Anfänger-Themen 15
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
M Komisches Verhalten der Variablen Java Basics - Anfänger-Themen 6
H Variablen Multiplikation einer inkrementierten Variablen Java Basics - Anfänger-Themen 5
scratchy1 Variablen vertauschen wenn Bedingung "umgedreht" wird Java Basics - Anfänger-Themen 40
J Variablen mit einer anderen Klasse bekannt machen Java Basics - Anfänger-Themen 7
C Methoden Problem beim Speichern von Variablen Java Basics - Anfänger-Themen 1
A Übergreifende Variablen Java Basics - Anfänger-Themen 17
A Variablen Verständnisfrage bzgl. Variablen/Referenzen Java Basics - Anfänger-Themen 3
H Variablen Methode zum Abfragen von Variablen aus Subklassen Java Basics - Anfänger-Themen 9
P Variablen Variablen voneinander abhängig Java Basics - Anfänger-Themen 54
F Liste nach einer Variablen sortieren Java Basics - Anfänger-Themen 6
L Variablen in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
M For-Schleife durch zwei versch. Variablen begrenzen Java Basics - Anfänger-Themen 27
J Klassen Variablen in andere Klassen oder Methoden übernehmen Java Basics - Anfänger-Themen 1
P Liste auslesen und in Variablen speichern Java Basics - Anfänger-Themen 7
temi Redundante Variablen Java Basics - Anfänger-Themen 29
Aprendiendo Zweifel mit versteckter Variablen Java Basics - Anfänger-Themen 16
L Variablen einmal nur zu weisen Java Basics - Anfänger-Themen 62
D Statische Variablen/Methoden Java Basics - Anfänger-Themen 3
R Abfrage von Variablen in Unterklassen einer ArrayList Java Basics - Anfänger-Themen 9
M Listener für Button - Wert von Variablen verändern Java Basics - Anfänger-Themen 14
S Vererbung Variablen klassenübergreifend nutzen Java Basics - Anfänger-Themen 42
R Auf Variablen einer anderen Klasse zugreifen? Java Basics - Anfänger-Themen 1
D Fehlermeldung obwohl Variablen bereits deklariert sind? Java Basics - Anfänger-Themen 14
E 2 Probleme - Datum & private finale Variablen Java Basics - Anfänger-Themen 5
Aruetiise Variablen JFrame und Variablen Java Basics - Anfänger-Themen 3
L Variablen dekleration + reset Java Basics - Anfänger-Themen 16
T Übernahme einer Variablen im ActionListener/ActionEvent Java Basics - Anfänger-Themen 2
D Kapselung final Variablen mit Getter? Java Basics - Anfänger-Themen 2
C Variablen von einem JFrame in einen anderen übertragen Java Basics - Anfänger-Themen 3
P Interface Variablen-Inhalte werden nicht übergeben Java Basics - Anfänger-Themen 3
C Variablen in Schleifen außerhalb verwenden Java Basics - Anfänger-Themen 2
S Variablen Flexible Variablen Namen Java Basics - Anfänger-Themen 3
R Erste Schritte 3 Variablen hochzählen lassen Java Basics - Anfänger-Themen 1
RowdyN Variablen Variablen beliebig benennen? Java Basics - Anfänger-Themen 6
S OOP Variablen zwischen mehreren Klassen Java Basics - Anfänger-Themen 11
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
H Variablen einer Schleife zwischenspeichern Java Basics - Anfänger-Themen 2
P Klassen Variablen von einer Klasse zur anderen Java Basics - Anfänger-Themen 5
H Objekt überschreibt Variablen vorheriger Objekte Java Basics - Anfänger-Themen 2
P Variablen in Excel speichern Java Basics - Anfänger-Themen 6
S PHP Aufruf mit mehreren Variablen Java Basics - Anfänger-Themen 2
F Variablen unterschiedlicher Datentypen Java Basics - Anfänger-Themen 6
S ActionListener und Statische Variablen Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
L Vergleich zweier Variablen, mit Abweichung Java Basics - Anfänger-Themen 3
P Variablen einer Methode in andere Method übergeben Java Basics - Anfänger-Themen 6
G Variablen Verwendung von Variablen in anderer Klasse Java Basics - Anfänger-Themen 6
P Textfelder in Variablen speichern Java Basics - Anfänger-Themen 13
K arraygröße durch variablen Konstruktor? Java Basics - Anfänger-Themen 7
J Vererbung Variablen aus Superklasse übernehmen Java Basics - Anfänger-Themen 2
L Variablen aus TXT Datei auslesen und vergleichen. Java Basics - Anfänger-Themen 5
K Welchen Typ haben Variablen in Default-Methoden und in statischen Methoden in Schnittstellen? Java Basics - Anfänger-Themen 4
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
L zwei Variablen gleichzeitig übergeben Java Basics - Anfänger-Themen 6
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
D Klassen Verhalten von Klassenvererbung bei Variablen Java Basics - Anfänger-Themen 1
G Alle Objekte und Variablen automatisch ausgeben Java Basics - Anfänger-Themen 7
S OOP Werte von Vektoren mit 3 Variablen ausgeben lassen Java Basics - Anfänger-Themen 3
A Variablen aus einer Schleife gezielt auslesen Java Basics - Anfänger-Themen 11
A Methoden Zugriff auf eingelesene Variablen in der main Methode (ohne Änderung der Parameterliste) Java Basics - Anfänger-Themen 4
K Enigma, variablen übernehmen Java Basics - Anfänger-Themen 6
F Erste Schritte Dynamische Variablen Java Basics - Anfänger-Themen 15
N Variablen zurück casten Java Basics - Anfänger-Themen 3
M Repräsentation von variablen/OOP Java Basics - Anfänger-Themen 2
B Probleme beim einlesen einer short variablen für einen Array Java Basics - Anfänger-Themen 1
S Warum erlaubt ein while-Loop keine Variablen-Declaration wie der for-Loop..? Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben