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?
 

Marinek

Bekanntes Mitglied
Ohne Quellcode oder sonstigen Kontext, können wir hier nur raten.

Informatik ist eine Wissenschaft und da wird nicht geraten.
 

NicoHatProbleme2

Bekanntes Mitglied
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?
 

Marinek

Bekanntes Mitglied
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.
 

KonradN

Super-Moderator
Mitarbeiter
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.
 

NicoHatProbleme2

Bekanntes Mitglied
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");
    }
}
 

KonradN

Super-Moderator
Mitarbeiter
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.
 

KonradN

Super-Moderator
Mitarbeiter
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.
 

NicoHatProbleme2

Bekanntes Mitglied
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
 

KonradN

Super-Moderator
Mitarbeiter
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.
 

NicoHatProbleme2

Bekanntes Mitglied
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
 

KonradN

Super-Moderator
Mitarbeiter
(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.
 

NicoHatProbleme2

Bekanntes Mitglied
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...
 

NicoHatProbleme2

Bekanntes Mitglied
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();
        }
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Mehrere Panels auf JFrame AWT, Swing, JavaFX & SWT 8
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
Paty JFrame anfänger bräuchte hilfestellung AWT, Swing, JavaFX & SWT 7
Apfelbaum2005 Swing JFrame mehrere JPanels mit unterschiedlichen Formen hinzufügen AWT, Swing, JavaFX & SWT 1
N AWT JPanel zu Jframe hinzufügen AWT, Swing, JavaFX & SWT 2
Mausposition relativ zu JFrame bekommen AWT, Swing, JavaFX & SWT 6
sserio JFrame setIconImmage() funktioniert nicht AWT, Swing, JavaFX & SWT 3
N CPU Belastung bei offenem JFrame auf fast 100% AWT, Swing, JavaFX & SWT 15
N Knopf ganz oben (JFrame) AWT, Swing, JavaFX & SWT 9
N JFrame löscht alles, wenn groß gemacht AWT, Swing, JavaFX & SWT 9
N jFrame löscht am Ende des Threads alles AWT, Swing, JavaFX & SWT 2
E JFrame resizing AWT, Swing, JavaFX & SWT 2
E Swing Mausposition auf einem JFrame erkennen AWT, Swing, JavaFX & SWT 5
Lunar Swing JFrame erstellt; weitere Elemente werden nicht eingefügt/sind nicht zu sehen AWT, Swing, JavaFX & SWT 4
L JFrame Gui in anderer Methode aufrufen AWT, Swing, JavaFX & SWT 0
H Beim JFrame erstellen ein anderes schließen AWT, Swing, JavaFX & SWT 0
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
H Tabelle in JFrame einfügen AWT, Swing, JavaFX & SWT 1
VPChief Ein JFrame ohne setUndecorated(true); nicht verschiebbar machen. AWT, Swing, JavaFX & SWT 6
R Swing Hat mein JFrame meinen Component? AWT, Swing, JavaFX & SWT 2
R Swing Design des oberen Balkens in JFrame AWT, Swing, JavaFX & SWT 2
B KeyListener auf JFrame reagiert nicht AWT, Swing, JavaFX & SWT 8
R Swing Komponente im JFrame überschreinen sich AWT, Swing, JavaFX & SWT 7
R Swing Ein gezeichneten String aus dem JFrame löschen AWT, Swing, JavaFX & SWT 5
J Exception beim JFrame erstellen AWT, Swing, JavaFX & SWT 6
T JFrame aktualisieren AWT, Swing, JavaFX & SWT 2
T Bilder bei einem JFrame einfügen AWT, Swing, JavaFX & SWT 4
R Swing Background Image in JFrame implementieren AWT, Swing, JavaFX & SWT 40
L Verbindung von Code und JFrame AWT, Swing, JavaFX & SWT 4
L JFrame wird zu klein erstellt AWT, Swing, JavaFX & SWT 7
dereki2000 Swing JFrame nah hinzufügen von Komponenten akualisieren. AWT, Swing, JavaFX & SWT 2
T JFrame Bild einfügen AWT, Swing, JavaFX & SWT 9
T JavaFX JFrame verhalten wie JOptionPane (ErrorMessage) AWT, Swing, JavaFX & SWT 1
T LookAndFeel LookAndFeel funktioniert nicht beim JFrame wechsel AWT, Swing, JavaFX & SWT 3
P Swing Mehrere JPanels auf ein JFrame hinzufügen? AWT, Swing, JavaFX & SWT 2
F JFrame zeigt nicht alle Elemente auf anhieb an AWT, Swing, JavaFX & SWT 4
P JPanle, JFrame und Graphics AWT, Swing, JavaFX & SWT 2
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
K Grafik in JFrame einpassen AWT, Swing, JavaFX & SWT 3
D Mit Jmenu neue JFrame öffnen AWT, Swing, JavaFX & SWT 2
J BackgroundJPanel passt sich dem JFrame nicht an AWT, Swing, JavaFX & SWT 7
C Swing JFrame ändert Größe AWT, Swing, JavaFX & SWT 0
J JFrame Panel hinzufügen AWT, Swing, JavaFX & SWT 10
K JFrame bei JUnit Tests AWT, Swing, JavaFX & SWT 2
W Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8
D JFrame wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 1
R Swing JPanels auf JFrame auf verfügbaren Platz aufblasen AWT, Swing, JavaFX & SWT 4
JR2205 Swing JxMaps Einbindung Netbeans JFrame AWT, Swing, JavaFX & SWT 4
Zar von Domarus JFrame zu BufferedImage konvertieren AWT, Swing, JavaFX & SWT 3
K KeyListener ohne JFrame AWT, Swing, JavaFX & SWT 9
Joker4632 JFrame in eine Runnable auslagern? AWT, Swing, JavaFX & SWT 4
M Limit für JFrame-Vergrößerung AWT, Swing, JavaFX & SWT 8
GreenTeaYT Wie vergebe Ich den Jframe Title den Namen aus einem Element von der Arraylist ? AWT, Swing, JavaFX & SWT 4
MaxG. JFrame Größe ändern AWT, Swing, JavaFX & SWT 16
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
G Swing Wenn ich mein JFrame Fenster vergrößere die Inhalte anpassen AWT, Swing, JavaFX & SWT 1
G JFrame Probleme AWT, Swing, JavaFX & SWT 2
Ghostman1711 JFrame closing AWT, Swing, JavaFX & SWT 3
R Engineklasse mit JFrame AWT, Swing, JavaFX & SWT 4
M Default-WindowListener JFrame entfernen (Stichwort: iconified) AWT, Swing, JavaFX & SWT 4
ms_cikar Jframe zurück zu frame1 AWT, Swing, JavaFX & SWT 14
C Jframe ohne Rahmen AWT, Swing, JavaFX & SWT 3
lumpigerAffe Swing Jframe aktualisieren AWT, Swing, JavaFX & SWT 27
A Swing JFrame neuzeichnen lassen, position neu berechnen lassen? AWT, Swing, JavaFX & SWT 9
R JFrame schließen AWT, Swing, JavaFX & SWT 9
P Swing JFrame minimiert sich bei Doppelklick auf die Titel-Leiste AWT, Swing, JavaFX & SWT 16
krgewb AWT JFrame soll sich wie Dialog verhalten AWT, Swing, JavaFX & SWT 9
I JFrame an Bildschirm anpassen AWT, Swing, JavaFX & SWT 1
I JFrame Bild strecken und auf Bildschirmgröße anpassen AWT, Swing, JavaFX & SWT 2
P JFrame schrumpft bei Doppelklick auf die Titelleiste AWT, Swing, JavaFX & SWT 0
G JFrame - manuell Größe verändern AWT, Swing, JavaFX & SWT 6
D JFrame mindestgröße erzwingen AWT, Swing, JavaFX & SWT 2
H Swing JFrame mit JFXPanel NPE bei dispose() AWT, Swing, JavaFX & SWT 6
C Swing Borderlayout im JFrame AWT, Swing, JavaFX & SWT 4
B JButton erscheint in JFrame, obwohl er diesem nicht zugeordnet wurde! AWT, Swing, JavaFX & SWT 1
G Swing JFrame öffnen bei Pidgin Benachrichtigung AWT, Swing, JavaFX & SWT 5
OlafHD JLabel im JFrame Zentrieren AWT, Swing, JavaFX & SWT 2
S Kein JFrame unter Mac? AWT, Swing, JavaFX & SWT 8
G Resize JFrame AWT, Swing, JavaFX & SWT 8
J Teiltransparenter JFrame mit Blur-Effekt AWT, Swing, JavaFX & SWT 2
K Bild in JFrame AWT, Swing, JavaFX & SWT 2
V JScrollPane im zur Laufzeit verändernden JFrame AWT, Swing, JavaFX & SWT 0
M NetBeans JFrame Grundlangen fragen AWT, Swing, JavaFX & SWT 6
I Neues JFrame wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 5
S JFrame -> setVisible AWT, Swing, JavaFX & SWT 3
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
I Swing JMenuBar auch unten am JFrame? AWT, Swing, JavaFX & SWT 2
K SplashScreen neben JFrame behalten AWT, Swing, JavaFX & SWT 10
F Swing JLabel in JFrame anpassen AWT, Swing, JavaFX & SWT 20
B Swing Unterteiltes JFrame mit Bild in der Mitte AWT, Swing, JavaFX & SWT 4
H Netbeans Designer: Probleme mit JPanel und JFrame AWT, Swing, JavaFX & SWT 2
T Applet Applet in JFrame einbinden AWT, Swing, JavaFX & SWT 8
V JFrame wird nicht richtig angezeigt! AWT, Swing, JavaFX & SWT 2
I JFrame neu zeichnen, nicht überzeichnen! AWT, Swing, JavaFX & SWT 2
Y Kann man Buttons in einem JFrame rund machen ? AWT, Swing, JavaFX & SWT 2
W Swing Farbige JPanels auf JFrame werden nicht gezeigt. Was mach ich falsch? AWT, Swing, JavaFX & SWT 7
Z Java Draw -JFrame finde nicht die Mitte & höhe, breite AWT, Swing, JavaFX & SWT 7
O Swing JFrame Anzeigeproblem AWT, Swing, JavaFX & SWT 2
D jButton auf von jFrame erzeugtem jDialog AWT, Swing, JavaFX & SWT 16
J Swing unterschiedliche Inhalte in einem JFrame AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben