jButton führt Main Methode nicht richtig aus

Gr3enDrag0n

Mitglied
Ich brauche mal eure Hilfe. Ich habe gerade erst mit Programmieren angefangen, also kann es auch gut sein, dass ich mich einfach nur dumm anstelle.

Zu meinem Problem:
Wenn ich die Main Methode von "Receive" manuell ausführe, funktioniert die einwandfrei. Wenn ich sie Allerdings durch einen jButton starten möchte, wird sie nicht Ordentlich ausgeführt. Es öffnet sich dann nur ein leerer JFrame ohne jeglichen Inhalt.


[CODE lang="java" title="Aufruf"]jbReceive.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {

try {
Receive.main(null);
} catch (Exception error) {
error.printStackTrace();
}

}

});[/CODE]

Java:
public class Receive {

    static ArrayList<MyFile> myFiles = new ArrayList<>();

    public static void main(String[] args) throws Exception {

        int fileId = 0;
        ServerSocket serverSocket = new ServerSocket(6969);
        JFrame jFrame = new JFrame("SquareShare");
        jFrame.setSize(400, 400);
        jFrame.setLayout(new BoxLayout(jFrame.getContentPane(), BoxLayout.Y_AXIS));
        jFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

        WindowListener exitListener = new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {

                try {
                    serverSocket.close();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            }
        };
        jFrame.addWindowListener(exitListener);

        JPanel jPanel = new JPanel();
        jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.Y_AXIS));

        JScrollPane jScrollPane = new JScrollPane(jPanel);
        jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

        JLabel jlTitle = new JLabel("File Receiver");
        jlTitle.setFont(new Font("Arial", Font.BOLD, 25));
        jlTitle.setBorder(new EmptyBorder(20, 0, 0, 0));
        jlTitle.setAlignmentX(Component.CENTER_ALIGNMENT);
        JLabel ip4 = new JLabel("Your adress: " + getOwnerIp());
        ip4.setFont(new Font("Arial", Font.BOLD, 10));
        ip4.setBorder(new EmptyBorder(10, 0, 0, 0));
        ip4.setAlignmentX(Component.CENTER_ALIGNMENT);

        JButton jbToClipboard = new JButton("Copy");
        jbToClipboard.setPreferredSize(new Dimension(20, 20));
        jbToClipboard.setFont(new Font("Arial", Font.BOLD, 20));
        jbToClipboard.setAlignmentX(Component.CENTER_ALIGNMENT);

        jFrame.add(jlTitle);
        jFrame.add(ip4);
        jFrame.add(jbToClipboard);
        jFrame.add(jScrollPane);

        jFrame.setVisible(true);

        jbToClipboard.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(getOwnerIp()), null);

            }
        }

        );

        while (true)

        {
            try {
                Socket socket = serverSocket.accept();

                DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());

                int fileNameLength = dataInputStream.readInt();

                if (fileNameLength > 0) {
                    byte[] fileNameBytes = new byte[fileNameLength];
                    dataInputStream.readFully(fileNameBytes, 0, fileNameBytes.length);
                    String fileName = new String(fileNameBytes);

                    int fileContentLength = dataInputStream.readInt();

                    if (fileContentLength > 0) {
                        byte[] fileContentBytes = new byte[fileContentLength];
                        dataInputStream.readFully(fileContentBytes, 0, fileContentLength);

                        JPanel jpFileRow = new JPanel();
                        jpFileRow.setLayout(new BoxLayout(jpFileRow, BoxLayout.Y_AXIS));

                        JLabel jlFileName = new JLabel(fileName);
                        jlFileName.setFont(new Font("Arial", Font.BOLD, 20));
                        jlFileName.setBorder(new EmptyBorder(10, 0, 10, 0));
                        jlFileName.setAlignmentX(Component.CENTER_ALIGNMENT);

                        if (getFileExtension(fileName).equalsIgnoreCase("txt")) {
                            jpFileRow.setName(String.valueOf(fileId));
                            jpFileRow.addMouseListener(getMyMouseListener());

                            jpFileRow.add(jlFileName);
                            jPanel.add(jpFileRow);
                            jFrame.validate();
                        } else {
                            jpFileRow.setName(String.valueOf(fileId));
                            jpFileRow.addMouseListener(getMyMouseListener());

                            jpFileRow.add(jlFileName);
                            jPanel.add(jpFileRow);

                            jFrame.validate();
                        }
                        myFiles.add(new MyFile(fileId, fileName, fileContentBytes, getFileExtension(fileName)));

                        fileId++;
                    }

                }
            } catch (IOException error) {
                error.printStackTrace();
            }

        }

    }

    public static MouseListener getMyMouseListener() {
        return new MouseListener() {

            @Override
            public void mouseClicked(MouseEvent e) {

                JPanel jPanel = (JPanel) e.getSource();

                int fileId = Integer.parseInt(jPanel.getName());

                for (MyFile myFile : myFiles) {
                    if (myFile.getId() == fileId) {
                        JFrame jfPreview = createFrame(myFile.getName(), myFile.getData(), myFile.getFileExtension());
                        jfPreview.setVisible(true);
                    }
                }
            }

            public static JFrame createFrame(String fileName, byte[] fileData, String fileExtension) {

                JFrame jFrame = new JFrame("SquareShare");
                jFrame.setSize(800, 400);

                JPanel jPanel = new JPanel();
                jPanel.setLayout(new BoxLayout(jPanel, BoxLayout.Y_AXIS));

                JLabel jlTitle = new JLabel("File Receiver");
                jlTitle.setAlignmentX(Component.CENTER_ALIGNMENT);
                jlTitle.setFont(new Font("Arial", Font.BOLD, 25));
                jlTitle.setBorder(new EmptyBorder(20, 0, 10, 0));

                JLabel jlPrompt = new JLabel("Are you sure you want to download" + fileName);
                jlPrompt.setFont(new Font("Arial", Font.BOLD, 20));
                jlPrompt.setBorder(new EmptyBorder(20, 0, 10, 0));
                jlPrompt.setAlignmentX(Component.CENTER_ALIGNMENT);

                JButton jbYes = new JButton("Yes");
                jbYes.setPreferredSize(new Dimension(150, 75));
                jbYes.setFont(new Font("Arial", Font.BOLD, 20));

                JButton jbNo = new JButton("No");
                jbNo.setPreferredSize(new Dimension(150, 75));
                jbNo.setFont(new Font("Arial", Font.BOLD, 20));

                JLabel jlFileContent = new JLabel();
                jlFileContent.setAlignmentX(Component.CENTER_ALIGNMENT);

                JPanel jpButtons = new JPanel();
                jpButtons.setBorder(new EmptyBorder(20, 0, 10, 0));
                jpButtons.add(jbYes);
                jpButtons.add(jbNo);

                if (fileExtension.equalsIgnoreCase("txt")) {
                    jlFileContent.setText("<html>" + new String(fileData) + "</html>");
                } else {
                    // jlFileContent.setIcon(new ImageIcon(fileData));

                    // Picture size must be cropped!!!

                }

                jbYes.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {

                        JFrame parentFrame = new JFrame();

                        JFileChooser fileChooser = new JFileChooser();
                        fileChooser.setDialogTitle("SquareShare");

                        int userSelection = fileChooser.showSaveDialog(parentFrame);

                        if (userSelection == JFileChooser.APPROVE_OPTION) {
                            File fileToSave = fileChooser.getSelectedFile();
                            String destination = fileToSave.getAbsolutePath();

                            File fileToDownload = new File(destination + "." + getFileExtension(fileName));
                            try {
                                FileOutputStream fileOutputStream = new FileOutputStream(fileToDownload);

                                fileOutputStream.write(fileData);

                                fileOutputStream.close();

                                jFrame.dispose();
                            } catch (IOException error) {
                                error.printStackTrace();
                            }
                        }

                    }
                });

                jbNo.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        jFrame.dispose();
                    }
                });

                jPanel.add(jlTitle);
                jPanel.add(jlPrompt);
                jPanel.add(jlFileContent);
                jPanel.add(jpButtons);

                jFrame.add(jPanel);

                return jFrame;

            }

            @Override
            public void mousePressed(MouseEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mouseReleased(MouseEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mouseEntered(MouseEvent e) {
                // TODO Auto-generated method stub

            }

            @Override
            public void mouseExited(MouseEvent e) {
                // TODO Auto-generated method stub

            }

        };
    }

    public static String getFileExtension(String fileName) {
        // Would not work with .tar.gz
        int i = fileName.lastIndexOf('.');
        if (i > 0) {
            return fileName.substring(i + 1);
        } else {
            return "No extension found.";
        }
    }

    public static String getOwnerIp() {
        try {
            return InetAddress.getLocalHost().getHostAddress();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        return null;
    }
}
 
Beste Antwort
K
Dazu gibt es 2 Threads ... im anderen habe ich das Problem erläutert. Die Endlosschleife blockiert den EDT wenn die main Methode aus dem EDT heraus aufgerufen wurde.
M

Mart

Gast
eine main zweimal aufrufen sollte man nicht tun eine Main ist nur der Einstiegs Punkt für ein Programm

ab dann solltest du klassen bauen und objekte

mit klassen und objekte kannst du den Code aufteilen und dann findest du sachen leichter
ein while (true) in einen Grafik Thread einzubauen ist eher nicht so toll das sollte im hintergrund passieren da dein Grafik thread in der Zwischen zeit nicht auf input reagieren kann
 

Gr3enDrag0n

Mitglied
Ich weiß nicht ob du das ganz verstanden hast, was ich damit meinte. Wenn ich mein Programm Starte und den jButton "receive" anklicke, öffnet sich ein jFrame ohne Inhalt, der auf nichts reagiert. Wenn ich allerdings in Eclipse das Programm nochmal Starte und nochmal auf den jButton klicke, funktioniert es ganz normal.
 
K

kneitzel

Gast
Dazu gibt es 2 Threads ... im anderen habe ich das Problem erläutert. Die Endlosschleife blockiert den EDT wenn die main Methode aus dem EDT heraus aufgerufen wurde.
 
Beste Antwort
Ähnliche Java Themen
  Titel Forum Antworten Datum
Hilde22 Neu Start JButton einfügen Java Basics - Anfänger-Themen 2
W GUI - JButton ohne Funktion? Java Basics - Anfänger-Themen 24
M JButton setBackground() färbt nicht den ganzen Knopf Java Basics - Anfänger-Themen 4
C JButton reagiert nicht auf actionListener Java Basics - Anfänger-Themen 15
J Jbutton blinkt Java Basics - Anfänger-Themen 5
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
E JButton und JTextField Java Basics - Anfänger-Themen 1
V_Fynn03 Erste Schritte JButton funktioniert nicht trotz richtiger Methode. Java Basics - Anfänger-Themen 17
J Erste Schritte if Abfrage von JButton in 2. Klasse Java Basics - Anfänger-Themen 27
J Erste Schritte Actionlistener für tbar/ JButton Java Basics - Anfänger-Themen 15
krgewb Icon von JButton ändern Java Basics - Anfänger-Themen 1
P JButton -Arrays Java Basics - Anfänger-Themen 4
A JButton in anderer Klasse bearbeiten. Java Basics - Anfänger-Themen 2
L Erste Schritte JButton reagiert nicht Java Basics - Anfänger-Themen 5
S Bild über JButton legen Java Basics - Anfänger-Themen 3
V Einem JButton anweisungen geben Java Basics - Anfänger-Themen 4
D Methoden JButton und JLabel in einer Methode erstellen Java Basics - Anfänger-Themen 5
F Interface JButton von anderer Klasse hinzufügen Java Basics - Anfänger-Themen 2
J JButton macht was er will Java Basics - Anfänger-Themen 3
D JButton soll Farbe von JTextfield ändern Java Basics - Anfänger-Themen 5
H JButton - Wechsel der Textfarbe alle 500ms Java Basics - Anfänger-Themen 10
G KeyListener und JButton vertragen sich nicht Java Basics - Anfänger-Themen 1
N JButton anpassen Java Basics - Anfänger-Themen 3
S JButton soll für bestimmte Zeit verschwinden Java Basics - Anfänger-Themen 5
schoenosrockos JButton füllt immer das ganze frame Java Basics - Anfänger-Themen 1
D JButton in JDialog mit Action belgen Java Basics - Anfänger-Themen 6
V JButton einer anderen Klasse übergeben? Java Basics - Anfänger-Themen 6
F JButton [] mit Werten hinterlegen Java Basics - Anfänger-Themen 10
M Code um per jButton ein neues Fenster zu öffnen Java Basics - Anfänger-Themen 3
A weiter JButton Fehler Java Basics - Anfänger-Themen 3
W JTable mit einem JButton-Array füllen Java Basics - Anfänger-Themen 4
S JCombobox und JButton verknüpfen Java Basics - Anfänger-Themen 6
V wie kann ich eine Schleife pausieren, bis ein Jbutton gedrückt wird ? Java Basics - Anfänger-Themen 17
N Erste Schritte JButton reagiert nur einmal. Java Basics - Anfänger-Themen 12
S JButton Java Basics - Anfänger-Themen 2
A Farben wechseln mit JButton Java Basics - Anfänger-Themen 2
S Farbe eine Zeile in JTable ändern, wenn JButton geklickt wurd Java Basics - Anfänger-Themen 4
F Funktion eines JButton in einen Vektor verlagern Java Basics - Anfänger-Themen 4
S Interface JButton etc. wird in JFrame mit paint() nicht angezeigt Java Basics - Anfänger-Themen 6
A Labels Inner JButton Event Erstellbar? Java Basics - Anfänger-Themen 3
K JButton alles zurücksetzen Java Basics - Anfänger-Themen 1
U JButton: Beschriftung ueber Variable zuweisen Java Basics - Anfänger-Themen 6
S JButton erscheint erst bei Mouseover Java Basics - Anfänger-Themen 10
S JButton mit ActionListener Java Basics - Anfänger-Themen 5
S JDK installieren JButton BorderPoints?! Java Basics - Anfänger-Themen 7
E Problem mit erben von JButton Java Basics - Anfänger-Themen 7
J Bei Hinzufügen von JButton Programm langsam Java Basics - Anfänger-Themen 3
J Verknüpfung von JButton to JTextField Java Basics - Anfänger-Themen 4
S Jbutton per Passworteingabe aktivieren Java Basics - Anfänger-Themen 2
G über JButton Action einen anderen Button verändern Java Basics - Anfänger-Themen 7
H JButton - Icon(.png) aus resources laden Java Basics - Anfänger-Themen 23
M Hintergrundbild für JButton Java Basics - Anfänger-Themen 6
A jbutton - icon linksbündig, text zentriert Java Basics - Anfänger-Themen 10
M Input/Output JFrame mit JButton und JTextfield Java Basics - Anfänger-Themen 114
J Hilfe bei JButton Java Basics - Anfänger-Themen 6
A JButton[] und String[] in doppelter For-Schleife Java Basics - Anfänger-Themen 4
W JButton in gleiche Größe bringen Java Basics - Anfänger-Themen 4
pg1337 JButton zuschneiden Java Basics - Anfänger-Themen 3
T Modales JDialog schliessen mit JButton Java Basics - Anfänger-Themen 2
D JButton Array setBackground Java Basics - Anfänger-Themen 2
F JButton wie selektierter JTabbebPane-Header Java Basics - Anfänger-Themen 7
G jButton bei Klick String +1 Java Basics - Anfänger-Themen 5
C OOP Java JButton mit Funktion belegen Java Basics - Anfänger-Themen 3
S JButton wird nicht angezeigt Java Basics - Anfänger-Themen 14
C JButton.getIcon() != null Java Basics - Anfänger-Themen 3
E JButton-Text wird in Schleife nicht geändert Java Basics - Anfänger-Themen 4
F welches Layout für JButton-Liste verwenden Java Basics - Anfänger-Themen 6
T JButton Text ändern Java Basics - Anfänger-Themen 4
L JButton erscheint nur mit pack() Java Basics - Anfänger-Themen 3
U Passwort auf JButton setzen. Java Basics - Anfänger-Themen 2
E JButton Hintergrund / Rahmen entfernen? Java Basics - Anfänger-Themen 4
L Bild auf einem JButton Java Basics - Anfänger-Themen 4
K JButton.setText Problem Java Basics - Anfänger-Themen 6
M JButton und DisabledIcon Java Basics - Anfänger-Themen 2
K jButton zur Laufzeit hinzufügen Java Basics - Anfänger-Themen 22
A GUI - JButton problem! Java Basics - Anfänger-Themen 5
M JButton selbst nachprogrammieren Java Basics - Anfänger-Themen 3
A JButton Textrahmen Java Basics - Anfänger-Themen 7
A Platzierung eines JButton Java Basics - Anfänger-Themen 4
D JButton oder ImageIcon klickt "langsam" Java Basics - Anfänger-Themen 5
E JButton klassenübergreifend nutzen? Java Basics - Anfänger-Themen 6
R Liste graphischer Objekte z.B. JButton dynamisch erstellen Java Basics - Anfänger-Themen 13
J JList Inhalt nach JButton Klick aktualisieren Java Basics - Anfänger-Themen 8
S JButton trotz Box-Layout skalieren Java Basics - Anfänger-Themen 6
P JButton identifizieren Java Basics - Anfänger-Themen 8
K Funktion zu einem JButton hinzufügen Java Basics - Anfänger-Themen 27
D HTML Text von jButton disablen Java Basics - Anfänger-Themen 2
E Auf JButton in Arraylist zugreifen Java Basics - Anfänger-Themen 6
E Andere Form eines JButton Java Basics - Anfänger-Themen 17
A JButton ActionListener nach einmaligem Ausführen zurücksetzen Java Basics - Anfänger-Themen 13
B JButton Größe einstellen? Java Basics - Anfänger-Themen 3
E Zeilenumbruch in JButton mit Variable Java Basics - Anfänger-Themen 2
A JButton erscheint nicht (BlueJ) Java Basics - Anfänger-Themen 2
M JButton sieht komisch aus :-) Java Basics - Anfänger-Themen 5
B JPanel über JButton umändern Java Basics - Anfänger-Themen 9
D JButton transparent bekommen? Java Basics - Anfänger-Themen 5
H JButton Unsichtbar Java Basics - Anfänger-Themen 7
R JTextField mittels JButton in Konsole ausgeben Java Basics - Anfänger-Themen 2
J Variable die bei JButton Clicks mitzählt Java Basics - Anfänger-Themen 9
Developer_X JButton removt sich selbst Java Basics - Anfänger-Themen 32

Ähnliche Java Themen

Neue Themen


Oben