[Solved] AWT-EventQueue-0″ java.lang.NullPointerException


  1. Don’t make the print method static. You need to call this after the user has made a file selection, passing in the file contents…
  2. Don’t create a new instance of the PrintText in the print this is not sharing the results of the file selection with the print method.
  3. Make sure you are honoring the Thread rules of Swing
  4. If you open it, you’re responsible for closing it. Make sure you are closing you streams/readers
  5. You might like to check to see if the user actually selected a file, but I’ll leave that up to you.

Something more along the lines of…

public class PrintText implements Printable {

    private static String mText;

    // Below the code will allow the user to select a file and then print out the contents of the file
    public static void main(String[] args) throws IOException {
        new PrintText();
    }

    public PrintText() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                //selects the file
                JFileChooser chooser = new JFileChooser();
                chooser.showOpenDialog(null);
                File file = chooser.getSelectedFile();
                String filename = file.getName();
                //System.out.println("You have selected: " + filename);  testing to see if file seleected was right
                String path = file.getAbsolutePath();

                //Reads contents of file into terminal 
                //FileReader fr = new FileReader("filename");
                // FileReader fr = new FileReader("D:/Documents/" + "filename")); 

                BufferedReader br = null;
                try {
                    br = new BufferedReader(new FileReader(path));
                    List<String> list = new ArrayList<String>();
                    while ((mText = br.readLine()) != null) {
                        //Displays the contents of the file in terminal
                        System.out.println(mText);
                        list.add(mText);
                    }

                    printer();
                } catch (IOException exp) {
                    exp.printStackTrace();
                } finally {
                    try {
                        br.close();
                    } catch (Exception e) {
                    }
                }
                //fr.close(); 
            }
        });
    }
    //private static final String mText = 
    //    "This is a test to see if this text will be printed "; //This works perfectly fine
    AttributedString mStyledText = new AttributedString(mText);

    /**
     * Print a single page containing some sample text.
     */
    public void printer() {

        /* Get the representation of the current printer and 
         * the current print job.
         */
        PrinterJob printerJob = PrinterJob.getPrinterJob();
        /* Build a book containing pairs of page painters (Printables)
         * and PageFormats. This example has a single page containing
         * text.
         */
        Book book = new Book();
        book.append(this, new PageFormat());
        /* Set the object to be printed (the Book) into the PrinterJob.
         * Doing this before bringing up the print dialog allows the
         * print dialog to correctly display the page range to be printed
         * and to dissallow any print settings not appropriate for the
         * pages to be printed.
         */
        printerJob.setPageable(book);
        /* Show the print dialog to the user. This is an optional step
         * and need not be done if the application wants to perform
         * 'quiet' printing. If the user cancels the print dialog then false
         * is returned. If true is returned we go ahead and print.
         */
        boolean doPrint = printerJob.printDialog();
        if (doPrint) {
            try {
                printerJob.print();
            } catch (PrinterException exception) {
                System.err.println("Printing error: " + exception);
            }
        }
    }

    /**
     * Print a page of text.
     */
    public int print(Graphics g, PageFormat format, int pageIndex) {
        /* We'll assume that Jav2D is available.
         */
        Graphics2D g2d = (Graphics2D) g;
        /* Move the origin from the corner of the Paper to the corner
         * of the imageable area.
         */
        g2d.translate(format.getImageableX(), format.getImageableY());
        /* Set the text color.
         */
        g2d.setPaint(Color.black);
        /* Use a LineBreakMeasurer instance to break our text into
         * lines that fit the imageable area of the page.
         */
        Point2D.Float pen = new Point2D.Float();
        AttributedCharacterIterator charIterator = mStyledText.getIterator();
        LineBreakMeasurer measurer = new LineBreakMeasurer(charIterator, g2d.getFontRenderContext());
        float wrappingWidth = (float) format.getImageableWidth();
        while (measurer.getPosition() < charIterator.getEndIndex()) {
            TextLayout layout = measurer.nextLayout(wrappingWidth);
            pen.y += layout.getAscent();
            float dx = layout.isLeftToRight() ? 0 : (wrappingWidth - layout.getAdvance());
            layout.draw(g2d, pen.x + dx, pen.y);
            pen.y += layout.getDescent() + layout.getLeading();
        }
        return Printable.PAGE_EXISTS;
    }
}

1

solved AWT-EventQueue-0″ java.lang.NullPointerException