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.