Probleme mit Java und dem Zugriff auf eine Variable?

... komplette Frage anzeigen

9 Antworten

die Lösung ist sehr einfach

du machst  über der main Methode 

public static String test;

dann in dem try block test = dein dingsbums um die variable zu setzen
ACHTUNG ... nicht vorher nochmal String test schreiben

le tadaaaa.. schon kannst du zugreifen, dein Problem basiert übrigens darauf, dass ein TimerTask ein eigener Thread ist, und in deiner Implementierung der TimerTask den String test nicht sieht, falls du es genau erklärt haben möchtest einfach nachfragen ;)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von rmnstr
16.07.2016, 01:28

Das ist eine sehr unschöne Lösung. Die Variable sollte im Endeffekt nur TimerTask bekannt sein.

0

Naja für eine "Quick and Dirty"-Lösung kannst du die Variable "test" einer neuen Variable zuweisen die du dann als final deklarierst und diese einfach weiter gibst:

final String test2 = test;

...

public void run() {
    URLConnection url = new URL("http://teamspeak-servers.org/api/?object=votes&element=claim&key=xxx&username=" + test2).openConnection();
... }
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Assassins89
16.07.2016, 12:22

Hatten wir schon. Geht auch mehr oder weniger. Leider hängt das Programm dann nach dem Verbindungsaufbau zur Datenbank und ich hab keinen Dunst wieso.

0

Eine sehr gute Lösung dafür ist es, deinen eigenen TimerTask zu definieren (ihn also vom originalen TimerTask erben zu lassen) und die gewünschten Variablen im Konstruktor mitzugeben.

class CustomTimerTask extends TimerTask {
private String clientName;

public CustomTimerTask(final String clientName) {
this.clientName = clientName;
}

@Override
public void run() {
// use clientName here
}
}
Antwort bewerten Vielen Dank für Deine Bewertung

huhu Bist du nur an einer lösung intressiert oder auch an dem verständiss warum der fehler auftrtt ?

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Assassins89
16.07.2016, 00:57

Da ich Anfänger bin an beidem. Was bringt mir die Lösung wenn ich nicht verstehe wieso das so ist, wie es ist.

0

ich habe hier noch eine relativ schöne Lösung für dich ;)

http://hastebin.com/enocucupis.java

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Assassins89
16.07.2016, 10:18

Habs jetzt versucht mal ein zu bauen aber nicht geschafft. Kannst du mir noch sagen, wie ich das richtig mit einbauen kann?

0

Die variable test stirbt sozusagen nach der while. Sie ist nur innerhalb von while(){} verfügbar. Der Codeblock action, in dem du sie verwenden willst ist ganz woanders. Du müsstest die Variable Test un dem Codeblock initialisieren und auf etwas setzen, in dem die while und die action drin ist. Setzen nur, wenn die While übersprungen bzw. die Variable ungesetzt bleiben kann.

Antwort bewerten Vielen Dank für Deine Bewertung

Versuch mal die Variable als final zu kennzeichnen:

final String test;


Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Assassins89
16.07.2016, 00:34

Geht leider nicht.

0

kannst du einen link zum formatierten geben?

so unformatiert ist das einfach nur grausam wenn man das lesen soll :P

Antwort bewerten Vielen Dank für Deine Bewertung

Du könntest die Variabel einfach als Argument mitgeben?

public void run(string text)

Und beim aufrufen: 

run(text);
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Assassins89
16.07.2016, 00:32

Bin Anfänger in Java. Könntest du mir das als Codeschnipsel geben bitte?

0
Kommentar von PerfectMuffin
16.07.2016, 08:24

Die Signatur ist vom Interface vorgeschrieben.

Deshalb steht da "@Override"...

0