non-static methode mit static class aufrufen?

Error999

Grünschnabel
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
 
Ich seh jetzt zwar nicht deinen Quellcode aber ich tippe mal drauf, dass du vollkommen sinnloser weise irgendwo soetwas stehen hast:
Java:
 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.
 
Zuletzt bearbeitet:
Jo du hast vollkommen recht, ich habe
1.
Code:
 static Timer t = new Timer();

in meinem Code stehen und wenn ich einfach mal static weglasse, meckert er rum, wenn ich versuche
Code:
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.
 
Zuletzt bearbeitet:
Hi,

funktioniert so etwas nicht?

Java:
Timer t = new Timer();
    	t.scheduleAtFixedRate(new TimerTask() {
        public void run() {
            // Task here ...
        }
        }, 1000, 5000);

Gruß
joschi
 
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.
 
Zurück