tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
1754
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Error999 Error999 ist offline Grünschnabel
    Registriert seit
    Sep 2008
    Beiträge
    2
    Hio, also ich habe Folgendes Problem.

    Ihr müsst euch vorstellen ich habe einen kleinen Frame in diesem ist eine simple JTable mit ein paar Spalten. Die Daten in den Spalten werden aus einer SQL Datenbank abgerufen. So nun will ich, dass die Daten in der Tabelle immer aktuell sind und mit einem Timer werden sie immer wieder neu abgerufen. So nun werden die Daten zwar abgerufen aber der Frame wird nicht neu gezeichnet somit sieht man nichts von den neuabgerufenen Daten. Die tolle repaint() Methode lässt sich aber nicht über einen Timer aufrufen, da dieser nur static Methoden aufrufen kann...

    Ich bin am verzweifeln...

    Danke Error999
     

  2. #2
    Avatar von joschi70
    joschi70 joschi70 ist offline Mitglied Gold
    Registriert seit
    Sep 2008
    Beiträge
    143
    Hi,

    habe mich mit Timern und TimerTasks nicht so beschäftigt, aber warum sollte das nur statische Methoden funktinieren?
    Vielleicht würde Dir auch ein TableModelListener helfen, der bei einer Änderung der Tabellendaten aufgerufen wird.

    http://java.sun.com/docs/books/tutor...ml#modelchange

    Gruß
    joschi
     

  3. #3
    Andibert Andibert ist offline Mitglied Silber
    Registriert seit
    Sep 2006
    Ort
    Hildesheim
    Beiträge
    90
    Ich seh jetzt zwar nicht deinen Quellcode aber ich tippe mal drauf, dass du vollkommen sinnloser weise irgendwo soetwas stehen hast:
    Code java:
    1
    
     static Timer t = new Timer();
    In solchen Fällen ist es oft ein problem dass man von dem statischen Objekt (nicht Klasse) nicht mehr an die nichtstatischen Sachen drann kommt.
    Du hast zwei Möglichkeiten: entweder dein statisches Objekt hält eine Referenz auf deinen Frame, an dem das ding aufgerufen wird. Oder du machst deinen Timer nicht statisch.

    P.S. Des weiteren Tippe ich mal drauf, dass du der grausamen Sitte verfallen bist Deine Hauptklasse von JFrame erben zu lassen. Das macht IMMER Probleme weil du dann Programmlogik und Darstellung nicht mehr getrennt hast.
    Geändert von Andibert (30.09.08 um 15:03 Uhr)
     
    There are 10 kind of people, those who understand binary and those who don't.

  4. #4
    Error999 Error999 ist offline Grünschnabel
    Registriert seit
    Sep 2008
    Beiträge
    2
    Jo du hast vollkommen recht, ich habe
    1.
    Code :
    1
    
     static Timer t = new Timer();

    in meinem Code stehen und wenn ich einfach mal static weglasse, meckert er rum, wenn ich versuche
    Code :
    1
    
    t.scheduleAtFixedRate(new Task(), 1000, 5000);

    zu benutzen denn für den Schedule will er etwas statisches haben da kann ich machen was ich will.

    Und natürlich lasse ich meine Hauptklasse von Frame erben... hab ich nun mal so gelernt und mir fällt leider nicht ein wie man es besser machen könnte.

    Edit: Hab es hinbekommen.
    Geändert von Error999 (30.09.08 um 15:44 Uhr)
     

  5. #5
    Avatar von joschi70
    joschi70 joschi70 ist offline Mitglied Gold
    Registriert seit
    Sep 2008
    Beiträge
    143
    Hi,

    funktioniert so etwas nicht?

    Code java:
    1
    2
    3
    4
    5
    6
    
    Timer t = new Timer();
            t.scheduleAtFixedRate(new TimerTask() {
            public void run() {
                // Task here ...
            }
            }, 1000, 5000);

    Gruß
    joschi
     

  6. #6
    Andibert Andibert ist offline Mitglied Silber
    Registriert seit
    Sep 2006
    Ort
    Hildesheim
    Beiträge
    90
    Was meckert er denn?
    Vermutlich greifst du dann aus einem Statischen Kontext auf t zu.
    Irgentwo musst du dich entscheiden dich von statischen Einstiegspunkt main() in die nichtstatische Welt zu begeben.
    Ich mach das normalerweise immer ganz am Anfang mit

    MyApplication a = new MyApplication();
    a.init();

    Wobei ich die init methode verwende um das Programm tatsächlich zu starten.
    Static sollte nur verwendet werden wenn man wirklich verstanden hat was static bedeutet und wenn man es wirklich braucht. In allen anderen Fällen geht man das Risiko ein irgentwann irgentwo etwas nicht statisch machen zu müssen.... und dann klappt gar nichts mehr.

    Bei meinem ersten Projekt was die 1000 LOC überstiegen hatte hatte ich diese Probleme auch, um mir dann als es gar nicht mehr ging nen Buch zu nehmen und zu lernen wie genau static funktioniert.
     
    There are 10 kind of people, those who understand binary and those who don't.

Ähnliche Themen

  1. static Methode in einem Interface
    Von gollrich im Forum Algorithmen & Datenstrukturen mit Java
    Antworten: 9
    Letzter Beitrag: 01.12.11, 15:50
  2. Antworten: 7
    Letzter Beitrag: 10.06.10, 23:16
  3. Static Variable in Methode
    Von higret im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 25.05.05, 15:20
  4. C++ .Net Thread ohne static methode
    Von splizzer im Forum .NET Archiv
    Antworten: 1
    Letzter Beitrag: 21.03.05, 09:13
  5. Antworten: 8
    Letzter Beitrag: 25.05.04, 15:31