JFrame loescht alles, sobald der Thread zuende ist

NicoHatProbleme2

Bekanntes Mitglied
Wenn der Thread, mit dem ich den JFrame bearbeitet hatte, beendet wurde, löscht sich alles auf dem JFrame, obwohl danach nichts weiteres gemacht wird.
Das einzige, was ich machen kann, ist eine Schleife laufen lassen, die am Ende im Dauerschleife läuft.
Doch das ist ein Actionlistener, also seperat.

Warum ist das so?
 
Ohne Quellcode oder sonstigen Kontext, können wir hier nur raten.

Informatik ist eine Wissenschaft und da wird nicht geraten.
 
ist halt sehr kompliziert...
Java:
package Tools.Pixel2D.PixelGenerator;

import java.awt.Color;
import java.awt.event.*;

import javax.swing.*;

import Tools.Pixel2D.*;
import Tools.Menu.*;

public class PixelGenerator extends Importable implements ActionListener {
    JFrame frame;
    public PixelScreen pframe;
    PixelLayer layer;
    PixelGrid grid;
    PixelObjectFunction functions[];
    int fx = 0;
    Scheduals s;
    Accounts ac;
    List worlds;
    JButton add;
    JButton delete;
    JButton join;
    JButton edit;
    
    
    JTextField name;
    JLabel nameL;
    
    JLabel fieldSizeX;
    JLabel fieldSizeXAmount;
    JButton fieldSizeXPlus;
    JButton fieldSizeXMinus;
    int fSizeX = 10;
    
    JLabel fieldSizeY;
    JLabel fieldSizeYAmount;
    JButton fieldSizeYPlus;
    JButton fieldSizeYMinus;
    int fSizeY = 10;
    
    JLabel pixelSize;
    JLabel pixelSizeAmount;
    JButton pixelSizePlus;
    JButton pixelSizeMinus;
    int pSize = 1;
    
    JLabel gridSize;
    JLabel gridSizeAmount;
    JButton gridSizePlus;
    JButton gridSizeMinus;
    int gSize = 2;
    
    JButton addNewGame;
    JButton deleteNewGame;
    
    World ws = new World();
    public PixelGenerator(Accounts ac) {
        frame = new JFrame();
        frame.setBounds(20, 20, 1200, 650);
        frame.setLayout(null);
        frame.setVisible(false);
        this.ac = ac;
        s = new Scheduals(ac);
        functions = new PixelObjectFunction[100];
        spawnGames();
        spawnAddNewGame();
    }
    public void start() {
        s.logIn();
        while(!s.getIfLogInFinish()) {
        }
        if(!ac.getIfStringExsists(ac.getPath(), ac.getAccountOfSelectedName())) ac.addLine(ac.getPosOfSelectedPassword()+1, ac.getAccountOfSelectedName(), ac.getPath());
        frame.setVisible(true);
        gamesUi();
    }
    public void spawnGames() {
        worlds = new List(frame, this, 0, 3, 100, 100, 100, 20, true);
        worlds.setVisible(false);
        worlds.setSelectable(true, Color.yellow);
        worlds.setRowSelectable(true);
        
        add = new JButton("new Game");
        frame.add(add);
        add.setBounds(50, 540, 200, 50);
        add.addActionListener(this);
        add.setVisible(false);
        
        delete = new JButton("Delete");
        frame.add(delete);
        delete.setBounds(350, 540, 200, 50);
        delete.setVisible(false);
        delete.addActionListener(this);
        
        join = new JButton("Join");
        frame.add(join);
        join.setBounds(650, 540, 200, 50);
        join.setVisible(false);
        join.addActionListener(this);
        /**
        edit = new JButton("Edit");
        frame.add(edit);
        edit.setBounds(950, 540, 200, 50);
        edit.setVisible(false);**/
    }
    public void spawnAddNewGame() {
        nameL = new JLabel("Name: ");
        frame.add(nameL);
        nameL.setBounds(200, 100, 100, 20);
        nameL.setVisible(false);
        
        name = new JTextField("");
        frame.add(name);
        name.setBounds(300, 100, 100, 20);
        name.setVisible(false);
        
        fieldSizeX = new JLabel("Field Size X: ");
        frame.add(fieldSizeX);
        fieldSizeX.setBounds(200, 200, 100, 20);
        fieldSizeX.setVisible(false);
        
        fieldSizeXAmount = new JLabel("10");
        frame.add(fieldSizeXAmount);
        fieldSizeXAmount.setBounds(300, 200, 100, 20);
        fieldSizeXAmount.setVisible(false);
        
        fieldSizeXPlus = new JButton("+1");
        frame.add(fieldSizeXPlus);
        fieldSizeXPlus.setBounds(400, 200, 50, 20);
        fieldSizeXPlus.setVisible(false);
        
        fieldSizeXMinus = new JButton("-1");
        frame.add(fieldSizeXMinus);
        fieldSizeXMinus.setBounds(450, 200, 50, 20);
        fieldSizeXMinus.setVisible(false);
        
        
        fieldSizeY = new JLabel("Field Size Y: ");
        frame.add(fieldSizeY);
        fieldSizeY.setBounds(200, 250, 100, 20);
        fieldSizeY.setVisible(false);
        
        fieldSizeYAmount = new JLabel("10");
        frame.add(fieldSizeYAmount);
        fieldSizeYAmount.setBounds(300, 250, 100, 20);
        fieldSizeYAmount.setVisible(false);
        
        fieldSizeYPlus = new JButton("+1");
        frame.add(fieldSizeYPlus);
        fieldSizeYPlus.setBounds(400, 250, 50, 20);
        fieldSizeYPlus.setVisible(false);
        
        fieldSizeYMinus = new JButton("-1");
        frame.add(fieldSizeYMinus);
        fieldSizeYMinus.setBounds(450, 250, 50, 20);
        fieldSizeYMinus.setVisible(false);
        
        
        pixelSize = new JLabel("PixelSize: ");
        frame.add(pixelSize);
        pixelSize.setBounds(200, 300, 100, 20);
        pixelSize.setVisible(false);
        
        pixelSizeAmount = new JLabel("1");
        frame.add(pixelSizeAmount);
        pixelSizeAmount.setBounds(300, 300, 100, 20);
        pixelSizeAmount.setVisible(false);
        
        pixelSizePlus = new JButton("+1");
        frame.add(pixelSizePlus);
        pixelSizePlus.setBounds(400, 300, 50, 20);
        pixelSizePlus.setVisible(false);
        
        pixelSizeMinus = new JButton("-1");
        frame.add(pixelSizeMinus);
        pixelSizeMinus.setBounds(450, 300, 50, 20);
        pixelSizeMinus.setVisible(false);
        
        
        gridSize = new JLabel("Grid Size: ");
        frame.add(gridSize);
        gridSize.setBounds(200, 350, 100, 20);
        gridSize.setVisible(false);
        
        gridSizeAmount = new JLabel("2");
        frame.add(gridSizeAmount);
        gridSizeAmount.setBounds(300, 350, 100, 20);
        gridSizeAmount.setVisible(false);
        
        gridSizePlus = new JButton("+1");
        frame.add(gridSizePlus);
        gridSizePlus.setBounds(400, 350, 50, 20);
        gridSizePlus.setVisible(false);
        
        gridSizeMinus = new JButton("-1");
        frame.add(gridSizeMinus);
        gridSizeMinus.setBounds(450, 350, 50, 20);
        gridSizeMinus.setVisible(false);
        
        
        addNewGame = new JButton("Add");
        frame.add(addNewGame);
        addNewGame.setBounds(200, 500, 100, 20);
        addNewGame.setVisible(false);
        addNewGame.addActionListener(this);
        
        deleteNewGame = new JButton("Delete");
        frame.add(deleteNewGame);
        deleteNewGame.setBounds(350, 500, 100, 20);
        deleteNewGame.setVisible(false);
        deleteNewGame.addActionListener(this);
    }
    public void addNewGameUi() {
        name.setVisible(true);
        nameL.setVisible(true);
        
        fieldSizeX.setVisible(true);
        fieldSizeXAmount.setVisible(true);
        fieldSizeXPlus.setVisible(true);
        fieldSizeXMinus.setVisible(true);
        
        fieldSizeY.setVisible(true);
        fieldSizeYAmount.setVisible(true);
        fieldSizeYPlus.setVisible(true);
        fieldSizeYMinus.setVisible(true);
        
        pixelSize.setVisible(true);
        pixelSizeAmount.setVisible(true);
        pixelSizePlus.setVisible(true);
        pixelSizeMinus.setVisible(true);
        
        gridSize.setVisible(true);
        gridSizeAmount.setVisible(true);
        gridSizePlus.setVisible(true);
        gridSizeMinus.setVisible(true);
        
        addNewGame.setVisible(true);
        deleteNewGame.setVisible(true);
    }
    public void addNewGameUiHide() {
        name.setVisible(false);
        nameL.setVisible(false);
        
        fieldSizeX.setVisible(false);
        fieldSizeXAmount.setVisible(false);
        fieldSizeXPlus.setVisible(false);
        fieldSizeXMinus.setVisible(false);
        
        fieldSizeY.setVisible(false);
        fieldSizeYAmount.setVisible(false);
        fieldSizeYPlus.setVisible(false);
        fieldSizeYMinus.setVisible(false);
        
        pixelSize.setVisible(false);
        pixelSizeAmount.setVisible(false);
        pixelSizePlus.setVisible(false);
        pixelSizeMinus.setVisible(false);
        
        gridSize.setVisible(false);
        gridSizeAmount.setVisible(false);
        gridSizePlus.setVisible(false);
        gridSizeMinus.setVisible(false);
        
        addNewGame.setVisible(false);
        deleteNewGame.setVisible(false);

    }
    public void gamesUi() {
        worlds.deleteAll();
        setWorlds();
        worlds.setVisible(true);
        add.setVisible(true);
        delete.setVisible(true);
        join.setVisible(true);
        //edit.setVisible(true);
    }
    public void gamesUiHide() {
        worlds.setVisible(false);
        add.setVisible(false);
        delete.setVisible(false);
        join.setVisible(false);
        //edit.setVisible(false);
    }
    public void spawnWorldUi(int[] ints) {
        pframe = new PixelScreen(1200, 650, ints[3], ints[2]);
        layer = pframe.getLayer(0);
        grid = new PixelGrid(pframe, ints[4], layer);
        layer.setGrid(grid);
        layer.setVisible(true);
        layer.setVisible(false);
        pframe.setVisible(false);
    }
    public void worldUi() {
        frame.setVisible(false);
        pframe.setVisible(true);
        layer.setVisible(true);
    }
    public void setWorlds() {
        int acc = ac.getAccountOfSelectedName();
        int pos = ac.getPosOfSelectedPassword();
        int length = ac.getLengthOfAccount(acc)-3;;
        for(int i = 0; i < length-1; i++) {
            worlds.addLine();
            worlds.setComponentString(ac.readLine(acc, i+4), i, 0);
        }
    }
    public void add(PixelObjectFunction f) {
        functions[fx] = f;
        fx++;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == this.add){
            gamesUiHide();
            addNewGameUi();
            System.out.println("add");
            
        }
        if(e.getSource() == this.delete){
            ac.deleteLine(ac.getPosOfString(worlds.getComponentString(worlds.getSelected()[0],0)), ac.getAccountOfSelectedName());
            String path = ac.getPath()+"Worlds/";
            String name = worlds.getComponentString(worlds.getSelected()[0],0);
            ws.deleteWorld(path, name);
            gamesUi();
            System.out.println("delete");
        }
        if(e.getSource() == this.addNewGame){
            if(!name.getText().equals("")) {
                int acc = ac.getAccountOfSelectedName();
                int pos = ac.getPosOfSelectedPassword();
                String path = ac.getPath()+"Worlds/";
                String name = this.name.getText();
                if(!ac.getIfStringExsists(name, acc)) {
                    ac.addLine(pos+2, acc, name);
                    ws.addWorld(path, name);
                    ws.createWorld(path, name, 10, 10, 4);
                    addNewGameUiHide();
                    gamesUi();
                }
            }
            System.out.println("addNew");
        }
        if(e.getSource() == this.join) {
            if(worlds.getSelected() != null) {
                String path = ac.getPath()+"Worlds/";
                String name = worlds.getComponentString(worlds.getSelected()[0],0);
                String[][][] s = ws.scanWorld(path, name);
                spawnWorldUi(ws.getIntsOfLastScanned());
                worldUi();
                layer.setStringToPixel(s);
                gamesUiHide();
                System.out.println("join");
// es geht hierrum
            }
        }
    }
    @Override
    public void action(int number) {
        System.out.println("Ja");
    }
}
(Tools ist meine eigene Klasse) (Es geht um join) was soll ich zur Verständnis noch schicken?
 
Also ich sehe hier etliche generelle Probleme, die die Analyse einfach nur erschweren:

- Variablennamen sind sehr schlecht gewählt. s, wc, name, acc - Also für dich mag das klar sein, aber mit den Variablennamen kann ich als externer Reviewer nichts anfangen.

Java:
 s.logIn();

        while(!s.getIfLogInFinish()) {

        }

Das sieht für mich falsch aus. Ohne weiteres gehe ich davon aus, dass slogIn ein blockierender aufruf ist. mit der While Schleife da belastest du mindestens deine CPU aber der der compiler wird diese while-Schleife, da sie nix macht vermutlich weg optimieren. Wenn der Login vorbei ist und dieser blockierend sein soll, dann soll er so implementiert werden.

Ganz viel doppelter Code, der sicherlich hier uns da mindestens Fehleranfällig ist:

Code:
public void addNewGameUiHide() {

sollte ein Parameter enthhalten und so aussehen:

Code:
setNewGameUiVisible(boolean visible)

Zu dem eigentlichen Problem, du hast es hier identifiziert. Hier müsste man sich Fragen, wenn ich gamesUIHide() ausführe, dann wird eben die UI versteckt. Versteckt man hier mehr als man will?

Code:
                gamesUiHide();
                System.out.println("join");
// es geht hierrum

Ich sehe hier keinen Thread (außer dem AWT Thread), in dem du etwas machst. Bitte beachte, dass deine Events nicht in dem UI Thread ablaufen.
 
wenn ich aber nach dem System.out eine Schleife einbaue, funktioniert es...
Im Augenblick habe ich keine Ahnung, was Du meinst, was dann funktionieren soll. In dem Thread, der UI Events abarbeitet, hat man keine langlaufenden Dinge zu machen. Da eine (Endlos-) Schleife einzubauen ist also schlicht Quatsch.

löscht sich alles auf dem JFrame,
Da Du ja gamesUiHide aufgerufen hast vorher, dürfte nichts gelöscht sein. Es nur eben alles unsichtbar, da Du ja setVisible(false) auf den Elementen aufgerufen hast.

Das bei einer Endlosschleife die Elemente weiterhin sichtbar sind, ist dann schlicht, weil Du den UI Thread, der dann das Fenster neu malen muss damit die Änderungen sichtbar werden, von Dir blockiert wurde.
 
es gibt aber einen Unterschied zwischen dem bei gamesUiHide invisible gesetzten und dem Rest, der beim pframe ist.

während das hier funktioniert:
Java:
package Tools.Pixel2D.PixelGenerator;

import java.awt.Color;
import java.awt.event.*;

import javax.swing.*;

import Tools.Pixel2D.*;
import Tools.Menu.*;

public class PixelGenerator extends Importable implements ActionListener {
    JFrame frame;
    public PixelScreen pframe;
    PixelLayer layer;
    PixelGrid grid;
    PixelObjectFunction functions[];
    int fx = 0;
    Scheduals s;
    Accounts ac;
    List worlds;
    JButton add;
    JButton delete;
    JButton join;
    JButton edit;
    
    
    JTextField name;
    JLabel nameL;
    
    JLabel fieldSizeX;
    JLabel fieldSizeXAmount;
    JButton fieldSizeXPlus;
    JButton fieldSizeXMinus;
    int fSizeX = 10;
    
    JLabel fieldSizeY;
    JLabel fieldSizeYAmount;
    JButton fieldSizeYPlus;
    JButton fieldSizeYMinus;
    int fSizeY = 10;
    
    JLabel pixelSize;
    JLabel pixelSizeAmount;
    JButton pixelSizePlus;
    JButton pixelSizeMinus;
    int pSize = 1;
    
    JLabel gridSize;
    JLabel gridSizeAmount;
    JButton gridSizePlus;
    JButton gridSizeMinus;
    int gSize = 2;
    
    JButton addNewGame;
    JButton deleteNewGame;
    
    World ws = new World();
    public PixelGenerator(Accounts ac) {
        frame = new JFrame();
        frame.setBounds(20, 20, 1200, 650);
        frame.setLayout(null);
        frame.setVisible(false);
        this.ac = ac;
        s = new Scheduals(ac);
        functions = new PixelObjectFunction[100];
        spawnGames();
        spawnAddNewGame();
    }
    public void start() {
        s.logIn();
        while(!s.getIfLogInFinish()) {
        }
        if(!ac.getIfStringExsists(ac.getPath(), ac.getAccountOfSelectedName())) ac.addLine(ac.getPosOfSelectedPassword()+1, ac.getAccountOfSelectedName(), ac.getPath());
        frame.setVisible(true);
        gamesUi();
    }
    public void spawnGames() {
        worlds = new List(frame, this, 0, 3, 100, 100, 100, 20, true);
        worlds.setVisible(false);
        worlds.setSelectable(true, Color.yellow);
        worlds.setRowSelectable(true);
        
        add = new JButton("new Game");
        frame.add(add);
        add.setBounds(50, 540, 200, 50);
        add.addActionListener(this);
        add.setVisible(false);
        
        delete = new JButton("Delete");
        frame.add(delete);
        delete.setBounds(350, 540, 200, 50);
        delete.setVisible(false);
        delete.addActionListener(this);
        
        join = new JButton("Join");
        frame.add(join);
        join.setBounds(650, 540, 200, 50);
        join.setVisible(false);
        join.addActionListener(this);
        /**
        edit = new JButton("Edit");
        frame.add(edit);
        edit.setBounds(950, 540, 200, 50);
        edit.setVisible(false);**/
    }
    public void spawnAddNewGame() {
        nameL = new JLabel("Name: ");
        frame.add(nameL);
        nameL.setBounds(200, 100, 100, 20);
        nameL.setVisible(false);
        
        name = new JTextField("");
        frame.add(name);
        name.setBounds(300, 100, 100, 20);
        name.setVisible(false);
        
        fieldSizeX = new JLabel("Field Size X: ");
        frame.add(fieldSizeX);
        fieldSizeX.setBounds(200, 200, 100, 20);
        fieldSizeX.setVisible(false);
        
        fieldSizeXAmount = new JLabel("10");
        frame.add(fieldSizeXAmount);
        fieldSizeXAmount.setBounds(300, 200, 100, 20);
        fieldSizeXAmount.setVisible(false);
        
        fieldSizeXPlus = new JButton("+1");
        frame.add(fieldSizeXPlus);
        fieldSizeXPlus.setBounds(400, 200, 50, 20);
        fieldSizeXPlus.setVisible(false);
        
        fieldSizeXMinus = new JButton("-1");
        frame.add(fieldSizeXMinus);
        fieldSizeXMinus.setBounds(450, 200, 50, 20);
        fieldSizeXMinus.setVisible(false);
        
        
        fieldSizeY = new JLabel("Field Size Y: ");
        frame.add(fieldSizeY);
        fieldSizeY.setBounds(200, 250, 100, 20);
        fieldSizeY.setVisible(false);
        
        fieldSizeYAmount = new JLabel("10");
        frame.add(fieldSizeYAmount);
        fieldSizeYAmount.setBounds(300, 250, 100, 20);
        fieldSizeYAmount.setVisible(false);
        
        fieldSizeYPlus = new JButton("+1");
        frame.add(fieldSizeYPlus);
        fieldSizeYPlus.setBounds(400, 250, 50, 20);
        fieldSizeYPlus.setVisible(false);
        
        fieldSizeYMinus = new JButton("-1");
        frame.add(fieldSizeYMinus);
        fieldSizeYMinus.setBounds(450, 250, 50, 20);
        fieldSizeYMinus.setVisible(false);
        
        
        pixelSize = new JLabel("PixelSize: ");
        frame.add(pixelSize);
        pixelSize.setBounds(200, 300, 100, 20);
        pixelSize.setVisible(false);
        
        pixelSizeAmount = new JLabel("1");
        frame.add(pixelSizeAmount);
        pixelSizeAmount.setBounds(300, 300, 100, 20);
        pixelSizeAmount.setVisible(false);
        
        pixelSizePlus = new JButton("+1");
        frame.add(pixelSizePlus);
        pixelSizePlus.setBounds(400, 300, 50, 20);
        pixelSizePlus.setVisible(false);
        
        pixelSizeMinus = new JButton("-1");
        frame.add(pixelSizeMinus);
        pixelSizeMinus.setBounds(450, 300, 50, 20);
        pixelSizeMinus.setVisible(false);
        
        
        gridSize = new JLabel("Grid Size: ");
        frame.add(gridSize);
        gridSize.setBounds(200, 350, 100, 20);
        gridSize.setVisible(false);
        
        gridSizeAmount = new JLabel("2");
        frame.add(gridSizeAmount);
        gridSizeAmount.setBounds(300, 350, 100, 20);
        gridSizeAmount.setVisible(false);
        
        gridSizePlus = new JButton("+1");
        frame.add(gridSizePlus);
        gridSizePlus.setBounds(400, 350, 50, 20);
        gridSizePlus.setVisible(false);
        
        gridSizeMinus = new JButton("-1");
        frame.add(gridSizeMinus);
        gridSizeMinus.setBounds(450, 350, 50, 20);
        gridSizeMinus.setVisible(false);
        
        
        addNewGame = new JButton("Add");
        frame.add(addNewGame);
        addNewGame.setBounds(200, 500, 100, 20);
        addNewGame.setVisible(false);
        addNewGame.addActionListener(this);
        
        deleteNewGame = new JButton("Delete");
        frame.add(deleteNewGame);
        deleteNewGame.setBounds(350, 500, 100, 20);
        deleteNewGame.setVisible(false);
        deleteNewGame.addActionListener(this);
    }
    public void addNewGameUi() {
        name.setVisible(true);
        nameL.setVisible(true);
        
        fieldSizeX.setVisible(true);
        fieldSizeXAmount.setVisible(true);
        fieldSizeXPlus.setVisible(true);
        fieldSizeXMinus.setVisible(true);
        
        fieldSizeY.setVisible(true);
        fieldSizeYAmount.setVisible(true);
        fieldSizeYPlus.setVisible(true);
        fieldSizeYMinus.setVisible(true);
        
        pixelSize.setVisible(true);
        pixelSizeAmount.setVisible(true);
        pixelSizePlus.setVisible(true);
        pixelSizeMinus.setVisible(true);
        
        gridSize.setVisible(true);
        gridSizeAmount.setVisible(true);
        gridSizePlus.setVisible(true);
        gridSizeMinus.setVisible(true);
        
        addNewGame.setVisible(true);
        deleteNewGame.setVisible(true);
    }
    public void addNewGameUiHide() {
        name.setVisible(false);
        nameL.setVisible(false);
        
        fieldSizeX.setVisible(false);
        fieldSizeXAmount.setVisible(false);
        fieldSizeXPlus.setVisible(false);
        fieldSizeXMinus.setVisible(false);
        
        fieldSizeY.setVisible(false);
        fieldSizeYAmount.setVisible(false);
        fieldSizeYPlus.setVisible(false);
        fieldSizeYMinus.setVisible(false);
        
        pixelSize.setVisible(false);
        pixelSizeAmount.setVisible(false);
        pixelSizePlus.setVisible(false);
        pixelSizeMinus.setVisible(false);
        
        gridSize.setVisible(false);
        gridSizeAmount.setVisible(false);
        gridSizePlus.setVisible(false);
        gridSizeMinus.setVisible(false);
        
        addNewGame.setVisible(false);
        deleteNewGame.setVisible(false);

    }
    public void gamesUi() {
        worlds.deleteAll();
        setWorlds();
        worlds.setVisible(true);
        add.setVisible(true);
        delete.setVisible(true);
        join.setVisible(true);
        //edit.setVisible(true);
    }
    public void gamesUiHide() {
        worlds.setVisible(false);
        add.setVisible(false);
        delete.setVisible(false);
        join.setVisible(false);
        //edit.setVisible(false);
    }
    public void spawnWorldUi(int[] ints) {
        pframe = new PixelScreen(1200, 650, ints[3], ints[2]);
        layer = pframe.getLayer(0);
        grid = new PixelGrid(pframe, ints[4], layer);
        layer.setGrid(grid);
        layer.setVisible(true);
        layer.setVisible(false);
        pframe.setVisible(false);
    }
    public void worldUi() {
        frame.setVisible(false);
        pframe.setVisible(true);
        layer.setVisible(true);
    }
    public void setWorlds() {
        int acc = ac.getAccountOfSelectedName();
        int pos = ac.getPosOfSelectedPassword();
        int length = ac.getLengthOfAccount(acc)-3;;
        for(int i = 0; i < length-1; i++) {
            worlds.addLine();
            worlds.setComponentString(ac.readLine(acc, i+4), i, 0);
        }
    }
    public void add(PixelObjectFunction f) {
        functions[fx] = f;
        fx++;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == this.add){
            gamesUiHide();
            addNewGameUi();
            System.out.println("add");
            
        }
        if(e.getSource() == this.delete){
            ac.deleteLine(ac.getPosOfString(worlds.getComponentString(worlds.getSelected()[0],0)), ac.getAccountOfSelectedName());
            String path = ac.getPath()+"Worlds/";
            String name = worlds.getComponentString(worlds.getSelected()[0],0);
            ws.deleteWorld(path, name);
            gamesUi();
            System.out.println("delete");
        }
        if(e.getSource() == this.addNewGame){
            if(!name.getText().equals("")) {
                int acc = ac.getAccountOfSelectedName();
                int pos = ac.getPosOfSelectedPassword();
                String path = ac.getPath()+"Worlds/";
                String name = this.name.getText();
                if(!ac.getIfStringExsists(name, acc)) {
                    ac.addLine(pos+2, acc, name);
                    ws.addWorld(path, name);
                    ws.createWorld(path, name, 10, 10, 4);
                    addNewGameUiHide();
                    gamesUi();
                }
            }
            System.out.println("addNew");
        }
        if(e.getSource() == this.join) {
            if(worlds.getSelected() != null) {
                String path = ac.getPath()+"Worlds/";
                String name = worlds.getComponentString(worlds.getSelected()[0],0);
                String[][][] s = ws.scanWorld(path, name);
                spawnWorldUi(ws.getIntsOfLastScanned());
                worldUi();
                layer.setStringToPixel(s);
                gamesUiHide();
                System.out.println("join");
                while(true) {
                    
                }
            }
        }
    }
    @Override
    public void action(int number) {
        System.out.println("Ja");
    }
}
 
wenn ich gamesUiHide() weglasse, ändert es garnichts (war aber auch klar, da die Schleife nach dem kommt)
Die Schleife verhindert einfach nur, dass das Fenster neu gemalt wird (nach meinem Verständnis). Die Applikation macht halt dann einfach nichts mehr - reagiert nicht mehr auf Events und so.

Ich würde den Code besser strukturieren, damit da ein besserer Überblick gewonnen werden kann.

Und Du musst
a) Genauer sagen, was wo das Problem ist. Du hast mehrere Frames und was wo fehlt oder nicht hast Du immer noch nicht verständlich gesagt!
b) Du kannst dann ggf. mit dem Debugger einfach mal einen Breakpoint setzen und dann direkt schauen, was denn der stand ist: Was hat das Frame für Elemente? Und sind diese sichtbar?

Ich denke aber nicht, dass wir hier so weiter kommen können ohne dass Du besser Informationen gibst und ggf. den Code besser strukturierst.
 
Was z.B. auffällt: pframe ist public - machst Du da ggf. auch von Außerhalb noch irgendwelche Zugriffe? Ohne Kapselung kann prinzipiell überall da etwas verändert werden, was eine Fehlersuche erschwert.
 
ok... also... die Elemente vom pframe werden gelöscht.

wenn ich einen Breakpoint setze, wird irgendwann bei
pumpOneEventForFilters(id);
alles Gelöscht, was auf dem Screen ist
 
Wenn Du deinen Code sauber strukturiert hättest und Daten sauber gekapselt wären, dann würde der Inhalt einer PixelScreen Instanz nur innerhalb von PixelScreen verändert. Du müsstest dann nur schauen, wo denn Inhalte gelöscht oder versteckt werden und könntest da Breakpoints setzen um z.B. den Stacktrace zu analysieren um zu sehen wann wer da etwas aufgerufen hat.

Aber so unstrukturiert wird das alles schwer bis unmöglich.

wenn ich einen Breakpoint setze, wird irgendwann bei
pumpOneEventForFilters(id);
alles Gelöscht, was auf dem Screen ist
Und da wird deutlich, dass wir dir hier so nicht helfen können. Wir haben nirgends in dem bisher von dir gezeigten Code ein "pumpOneEventForFilters". Daher können wir auch dem Hinweis in keiner Weise für Dich nachgehen ob uns da etwas auffällt.
 
Ich habe schon bei allen möglichen Lösche befehlen ein system.out eingesetzt.
Wenn ich bei eclipse debug mit einem Breakpoint benutze, finde ich,
nachdem ich meine eigene Klasse ausführe, wird der hier gelöscht ( nachdem ich ganzschön oft weiter gedrückt habe)
1651405407599.png
 
(ich habe jetzt alles in spawnWorldUi umgefrachtet... wollte gucken, on das was damit zutun hatte, dass der awt Thread endet)
Also der awt Thread sollte nie enden. Was endet ist natürlich Deine Event Routine. Das ist eine Methode, die aufgerufen wurde im Rahmen der Event Behandlung.

Nur um es noch einmal bildlich klar zu machen:
Da beim AWT sind so kleine Maler-Zwerge. Die hocken in Deinem Rechner und malen die Fenster.
Im Rahmen Deiner Eventbehandlung wirst Du also vermutlich irgend etwas machen, dass diesen Maler-Zwergen sagt: Malt das Fenster neu und das Fenster soll jetzt leer sein.
Aber Du legst das nur fest. Dadurch, dass Du dies festlegst, ist das Fenster nicht gemalt. Deine Anweisung muss erst verarbeitet werden und der AWT Thread muss diesen Maler-Zwergen sagen: Jetzt malt ihr bitte neu.

Also wenn Du ein Grafitti an einer Hauswand siehst, dann kannst Du da einen Malermeister anrufen und ihm sagen: Mal die Hauswand wieder weiss. Aber:
a) Dadurch, dass Du dem Malermeister diesen Auftrag gegeben hast, ist die Wand jetzt nicht sofort weiss!
b) Wenn Du nun den Malermeister am Telefon behältst (Deine tolle Endlosschleife), dann wird die Wand nie weiss - denn der Malermeister hängt da mit Dir am Telefon!

Vielleicht wird das jetzt etwas deutlicher. In Deinem Code ist das Problem. Das erkennst Du aber nicht daran, dass das Fenster plötzlich leer ist. Du musst genau schauen, was wo wie geändert wird. Und wenn Dein Auftrag an denMalermeister Scheiße ist, dann bringt es Dir nichts, dass Du den Malermeister kontrollierst und ihm bei seienn Tätigkeiten auf die Finger schaust: Dein Auftrag zählt bei der Bemalung einer Hauswand. Da musst Du nicht schauen, ob der Malermeister sich im Auto angeschnallt hat, er immer den Blinker gesetzt hat beim Abbiegen oder ob er beim Pinkeln im Stehen gepinkelt hat,...

Evtl. einfach einmal nachlesen, wie da die Abläufe generell sind. Java ist auch eine Insel beschreibt das auch etwas meine ich.
 
ich bin halt verwirrt, da ich dem nachdem ich ihm den system.out befehl gebe, auch nachdem ich mir nen break-point gegeben und alles angeguckt habe habe, keine Befehle mehr gebe...
 
wenn ich es im Main thread ausführe, oder einen neuen Thread erschaffe (extends Thread), wird das nicht gelöscht
Das geht:
Java:
f(e.getSource() == this.join) {
            if(worlds.getSelected() != null) {
                test test = new test();
                test.start();
                //spawnWorldUi();
                //while(true) {
                //}
            }
        }
        //
        
    }
    @Override
    public void action(int number) {
        System.out.println("Ja");
    }
    class test extends Thread  {
        public void run() {
            spawnWorldUi();
        }
    }
 

Zurück
Oben