Threads Problem bei Thread + Innere Klasse

Hallo Community,

ich versuche gerade einen Code nachzuvollziehen und bin über das hier gestolpert:

Test.java:
Java:
public class Test
{
    public static TFRunnables tfRuns = new TFRunnables();

    private static void tfCommandDos(String s)
    {
        TFRunnables.TFRunnableDos tfrunnabledos = new TFRunnables.TFRunnableDos(tfRuns, s);
        Thread thread = new Thread(tfrunnabledos);
        thread.start();
    }
}

TFRunnables.java:
Java:
public class TFRunnables
{
    class TFRunnableDos
        implements Runnable
    {
        public void run()
        {
        // Code...
        }

        private String myArgs;

        public TFRunnableDos(String s)
        {
            myArgs = s;
        }
    }
}


Der Compiler bemängelt diese Stelle:

Java:
TFRunnables.TFRunnableDos tfrunnabledos = new TFRunnables.TFRunnableDos(tfRuns, s);


...verständlich, da der Konstruktor

Java:
TfRunnableDos(TFRunnable t, String s){}

nicht vorhanden ist.
Warum hat der Programmierer jedoch "tfRuns" eingefügt? Wenn ich den Konstruktor/Aufruf des Konstruktors demensprächend "korrigiere" bekomme ich diese Fehlermeldung:

No enclosing instance of type TFRunnables is accessible. Must qualify the allocation with an enclosing instance of type TFRunnables (e.g. x.new A() where x is an instance of TFRunnables).

Hoffentlich kann mir jemand helfen.

Dankeschön im Vorraus,
Helikoptermann
 
Zuletzt bearbeitet:
Ohne dass die inner class public ist geht das halt nicht aus visibility gründen:

Java:
public class TFRunnables
{
    public (!!!!!!!!!!) class TFRunnableDos

Oder aber das war absicht und du musst den thread über eine methode der outer class erzeugen.
 
Danke erstmal für deine schnelle Antwort.

Dachte, dass "Default" Sichtbarkeit ausreicht um diese aufzurufen.
Jedoch besteht der Fehler weiterhin.
Ob es daran liegen kann, dass die Innere Klasse nicht "static" ist?

Helikoptermann
 
Java:
new TFRunnables.TFRunnableDos(..)
Wenn du die Instanz so erstellen willst, dann muss TFRunnableDos static sein (weil du eben statisch über die Klasse draufzugreifst.
In deinem Fall müsstest du die Instanz von TFRunnableDos so erzeugen:
Java:
TFRunnableDos trd = tfRunnablesInstance.new TFRunnableDos(...);
 

Zurück
Oben