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

Odpowiedz Nowy wątek
2017-11-04 14:26
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ź.

edytowany 2x, ostatnio: begjav, 2017-11-04 14:31
Prawdopodobnie szkoda było papieru żeby za każdym razem dodawać taki sam kod z metodą main - Black007 2017-11-04 19:46

Pozostało 580 znaków

2017-11-04 19:35
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ć.

Pozostało 580 znaków

2017-11-04 19:58
0

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

Pozostało 580 znaków

2017-11-06 13:23
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.

Żaden błąd i w oryginalnej wersji na pewno jest tak samo. Chodzi o to, że w książce mają się znaleźć najistotniejsze informacje, bez sensu by było zamieszczać cały kod. Właśnie też po to cały kod jest umieszczany jako załącznik do książki w formie elektronicznej, że jak sam nie będziesz potrafił tego ogarnąć to zajrzysz właśnie tam. - Manuel.Artificer 2017-11-06 13:40

Pozostało 580 znaków

2017-11-06 13:42
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.

Skoro tak no to w takim razie jest błąd, ale myślę, że takie umieszczanie całego kodu w książce nie jest dobrym pomysłem, bo po pierwsze marnują papier, a po drugie jak jest cały kod to go przepisujesz i mniej Ci wchodzi do głowy. Nagle się zdarzyło, że fragmentu brakowało i pojawił się problem jak to ma być zrobione. Dzięki czemu sam musiałeś pokombinować i dzięki temu teraz już wiesz do czego służy main, a przedtem nie wiedziałeś skoro zadałeś takie pytanie. Przez to też mało się nauczyłeś bo skoro jesteś na 8 rozdziale a nie znasz podstaw to kiepsko - Manuel.Artificer 2017-11-06 14:01
W takim przypadku radziłbym zmienić książkę. Ja kiedyś czytałem Java. Praktyczny kurs M. Lisa, do każdego rozdziału były zadanka, więc jak jesteś początkującym to zacząłbym od czegoś takiego. Tam nie było wszystkiego podanego na tacy, trzeba było samemu troszeczkę pomyśleć. Oczywiście jak nie będziesz wiedział jak coś ruszyć to z pomocą przyjdzie Ci właśnie ftp - Manuel.Artificer 2017-11-06 14:07

Pozostało 580 znaków

2017-11-06 17:45
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.


Wiedza to potęga
tak właśnie jest, nawet wspomina o tym w książce ;) - Tenonymous 2017-11-08 09:59

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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