Hi, napisałem prosty program do drukowania rekordów z bazy mySQL.
Niestety poniżej 79 linii rzucany jest wyjątek NullPointer.



package druke;

import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.util.List;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

class Frame extends JFrame {
    public Frame() {
        setSize(160, 120);
        setTitle("");

        action();
    }

    public void action() {
        createUI();
    }

    public void createUI() {
        setLayout(new GridLayout(5, 2));
        add(new JLabel("Nazwa bazy:"));
        add(fNameBase);
        add(new JLabel("User:"));
        add(fNameUser);
        add(new JLabel("Password"));
        add(fPass);
        add(new JLabel("Nazwa tabeli:"));
        add(fNameTab);

        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {
                    Class.forName("com.mysql.jdbc.Driver");
                    java.sql.Connection pol = DriverManager.getConnection("jdbc:mysql://localhost:3306/" + fNameBase.getText(),
                                                                                                                                                   fNameUser.getText(), new String(fPass.getPassword()));
                    st = pol.createStatement();
                    get();
                } catch (Exception ek) {
                    JOptionPane.showMessageDialog(null, "Nie nazwiazno polaczenia");
                }
                
            }
            public void get() {
                            String polecenie = "select * from " + fNameBase.getText() + "." + fNameTab.getText();

                            try {
                                rs = st.executeQuery(polecenie);
                                int i = 0;
                                while (rs.next()) {
                                    s1 = rs.getString(1);
                                    s2 = rs.getString(2);
                                    s3 = rs.getString(3);
                                    s4 = rs.getString(4);
                                   panel = new PrintPanel();
                                   panel.setStr(s1 + " - " + s2 + " - " + s3 + " - " + s4);

                                   System.out.println(s1 + ", " + s2 + "," + s3 + "," + s4);
                                }
                                st.close();
                            } catch (Exception ek) {
                            }
                             try {
                                 System.out.println("linia 79");
                                    PrinterJob pj = PrinterJob.getPrinterJob();
                                    panel = new PrintPanel();
                                    pj.setPrintable(panel);
                                    System.out.println(panel.getStr());
                                     System.out.println("linia 82; ");
                                     pras = new HashPrintRequestAttributeSet();
                                    if (pj.printDialog(pras)) {
                                         System.out.println("linia 84");
                                        pj.print(pras);
                                         System.out.println("linia 86");
                                    }
                                } catch (Exception e) {
                                     System.out.println("linia 88");
                                     System.out.println(e.toString());
                                }
                        }
        });
        add(b);

        JButton more = new JButton("Wiecej");
        more.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                pras = new HashPrintRequestAttributeSet();
                PrinterJob pj = PrinterJob.getPrinterJob();
                pj.pageDialog(pras);
            }
        });
        add(more);
    }
    JTextField fNameBase = new JTextField();
    JTextField fNameUser = new JTextField();
    JPasswordField fPass = new JPasswordField();
    JTextField fNameTab = new JTextField();
    java.sql.Statement st;
    JButton b = new JButton("Print");
    ResultSet rs;
    String s1, s2, s3, s4;
    PrintRequestAttributeSet pras;
    PrintPanel panel;

}

class PrintPanel implements Printable {
        public int print(Graphics g, PageFormat pageFormat, int page) {
            int i = 0;
            while(__str.get(i) != null) {
            g.drawString(__str.get(i), 10,y+=14);
            i++;
            }
            return (page == 0 ? PAGE_EXISTS : NO_SUCH_PAGE);
        }
        public void setStr(String arg) {
            __str.add(arg);
        }
        public String getStr() {
            String s = new String("");
            int i = 0;
            while(__str.get(i) != null) {
                s += "" + __str.get(i);
                i++;
            }
            return s;
        }
        private List<String>__str;
        int y = 10;
    }

public class Main {
    public static void main(String[] args) {

        Frame f = new Frame();
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    }

Czy ktoś ma jakieś sugestie dlaczego tak się dzieje? Czy inaczej - co muszę poprawić aby program zadziałała?

pozdrawiam i dziękuję za pomoc.