Przykłady z książki "Java Podstawy" Horstmanna bez metody main()

0

Cześć.
Uczę się z w/w książki. W rozdziale dotyczącym obsługi zdarzeń w AWT zaczęły się pojawiać przykłady bez metody main.
Ponieważ to już środek książki, to sobie oczywiście tę metodę potrafię dopisać i przykłady się kompilują i działają. Zastanawiam się jednak
czy jest to zwykłe niedopatrzenie autora, czy może jednak jakoś to się sprytnie kompiluje z tego kodu bez main()?
Oto przykład kodu bez metody main (rozdz. 8, str. 360 i 361):


package button;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ButtonFrame extends JFrame
{
    private JPanel buttonPanel;
    private static final int DEFAULT_WIDTH = 300;
    private static final int DEFAULT_HEIGHT = 200;

    public ButtonFrame()
    {
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

        //tworzenie przycisków
        JButton yellowButton = new JButton("Żółty");
        JButton blueButton   = new JButton("Niebieski");
        JButton redButton    = new JButton("Czerwony");

        //panel dla przycisków
        buttonPanel = new JPanel();

        //dodawanie przycisków do panelu
        buttonPanel.add(yellowButton);
        buttonPanel.add(blueButton);
        buttonPanel.add(redButton);

        add(buttonPanel);

        //tworzenie obiektów akcji przycisków
        ColorAction yellowAction = new ColorAction(Color.YELLOW);
        ColorAction blueAction   = new ColorAction(Color.BLUE);
        ColorAction redAction    = new ColorAction(Color.RED);

        //powiązanie akcji z przyciskami
        yellowButton.addActionListener(yellowAction);
        blueButton.addActionListener(blueAction);
        redButton.addActionListener(redAction);
    }

    private class ColorAction implements ActionListener
    {
        private Color b;

        public ColorAction(Color c)
        {
            b = c;
        }

        public void actionPerformed(ActionEvent e)
        {
            buttonPanel.setBackground(b);
            System.out.println("Naciśnięto przycisk " + e);
        }
    }
}

Edit.
Ja metodę main() dopisałem w klasie ButtonFrame w ten sposób:


    public static void main(String a[])
    {
        ButtonFrame bf = new ButtonFrame();
        bf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        bf.setVisible(true);
    }

Czy to jest poprawnie w jakimś projektowym sensie? Kompiluje się i uruchamia.

Z góry dziękuję mądrzejszym za odpowiedź.

0

Program nie może działać bez metody main(), bo pierwsze co robi kompilator to właśnie jej szuka.
Metoda main() może znajdować się w dowolnej klasie, ale musi istnieć.

0

Czyli tak jak myślałem. Dziękuję za odpowiedź.

0

No i wyjaśniło się. Jest to błąd w polskim wydanie tej książki. Pewnie wydawca sam skrócił kod źródłowy nie informując o tym w książce. Przykład na ftp są kompletne i działają bez problemu.

0

W taki razie sami wprowadzają w błąd. Bo prawie przed każdym przykładem piszą, że jest to kompletny kod źródłowy.

1
begjav napisał(a):

Zastanawiam się jednak czy jest to zwykłe niedopatrzenie autora, czy może jednak jakoś to się sprytnie kompiluje z tego kodu bez main()?

Moim zdaniem ani jedno, ani drugie. Autor prawdopodobnie ze względu na oszczędność miejsca umieścił fragment programu, licząc na to, że czytelnicy przeczytają kod i potraktują go jako uzupełnienie treści książki, a następnie spróbują napisać własny kod, zamiast bezmyślnie przepisywać treść z książki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1