Beiträge von 2#4u

    Ich habe mir den Code angesehen.
    Plus: Er ist kompilierbar.

    Zum OutOfMemoryError:
    Der tritt auf, weil du rekursiv Konstruktoren von Klassen aufrufst, bis der Speicher futsch ist. Liegt wohl daran, dass Swing Komponenten recht speicherhungrig sind.
    Normalerweise kommt eine Stack Overflow Exception.

    Du hast folgendes geschrieben:

    Code
    class Snake {
      private SnakeFrame sf = new SnakeFrame();
    }
    
    
    class SnakeFrame {
      private Snake snake = new Snake();
    }

    Was passiert wenn man 'new SnakeFrame()' oder 'new Snake()' macht?

    Code
    new Snake();
      --> new SnakeFrame();
              --> new Snake();
                      --> new SnakeFrame();
    usw.

    Zu deinem Programm:

    Es scheint mir, als ob du Probleme mit den Grundsätzen von Java hast. Mir ist jetzt auch klar, warum du "Schwierigkeiten" mit Gettern/Settern hast.

    Als Grundsatzeinführung:
    Es gibt Klassen und es gibt Objekte (Instanzen) von Klassen.
    Es gibt statische Methoden, Variablen, etc. und auch non-static.

    Statisch bedeutet, dass du im Kontext der Klasse arbeitest. Nicht-Statisch ist im Kontext EINES Objektes.

    Daher, was man nicht erwarten kann:

    Ausgangssituation: 2 Objekte der Klasse Snake in 2 unterschiedlichen Klassen A, B

    Wenn in Klasse A: snakeObjekt1.setBuxtehude(true); aufgerufen wird.
    Gilt NICHT in Klasse B: snakeObjekt2.getBuxtehude() == true !!
    Falls nicht mit statischen 'Dingen' gearbeitet wird.

    Ich kann dir nur empfehlen ein Java Buch zu lesen. Z.B. "Java ist auch eine Insel".

    Siehe:
    http://openbook.galileocomputing.de/javainsel8/

    :poke:
    Ich kann mit den .class Files (natürlich) nicht viel anfangen, da diese
    nicht den Source Code enthalten sondern das Kompilat sind.

    Soll heißen ich brauch die .java Dateien, weil ich keine Lust hab die .class Files zu decompilieren...

    sorry. vielleicht kannst du mir ein etwas größeres Stück Code schicken.
    Die Klassen als Anhang wären ein Anfang, ich würd's mir dann am WE anschaun.

    Aus der einen geposteten Methode werde ich nicht schlau.
    Ich kenne nicht die Abläufe in deinem Programm und weiß daher nicht
    was du mit dem Mutex 'snake' eigentlich schützen willst.

    vor allem ist jetzt auch noch (ein Thread?) 'nq' dazugekommen.

    lg

    Ich verstehe nicht ganz was du versuchst...

    'snake' ist anscheinend ein Thread Objekt.
    Wenn du das 'Start' Menü auswählst und der 'snake' Thread noch
    nicht gestartet ist, startest du ihn, und änderst das Menü zu 'Stop'.

    Soweit so gut. Beim nächsten Aufruf der Methode geht du in den
    else Zweig und wartest mit snake.wait();
    (Worauf auch immer)

    Auf jeden Fall brauchst du

    Code
    snake.notify();

    um den wartenden Thread wieder aufzuwecken.

    Gibt es noch ein anderes Codestück, das mnu_changeSnakeState.setText() aufruft?

    Gibt es noch ein anderes Codestück, das mit den 'snake' Thread Objekt zu tun hat?

    Der Code ist mir unverständlich aber ich gebe zu bedenken:
    - wait(), notify(), notifyAll() kann nur aufgerufen werden, wenn der Lock auf das selbe Objekt durch synchronized gehalten wird.
    - start() kann nur EINMAL auf einen Thread aufgerufen werden.
    - Thread.State.NEW hat der Thread nur nach dem Erzeugen und vor dem Starten.

    lg

    Ich denke nicht, dass dein Problem etwas mit Maven assemblys zu tun hat.

    Ich nehme an, dass der Konstruktor ImageIcon(String) mit "bild.png" nur im Filesystem funktioniert, nicht aber in einem gepacktem .jar File.

    Probier folgendes:

    URL imageURL = getClass().getResource("/bild.png");
    ImageIcon icon = new ImageIcon(imageURL);

    lg