Results 1 to 8 of 8
  1. #1
    west-wot is offline Member
    Join Date
    Dec 2012
    Posts
    16
    Rep Power
    0

    Default Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

    i am getting a really weird error message in my code, it comes after i have selected a file, the error is :

    Java Code:
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    	at java.text.AttributedString.<init>(AttributedString.java:127)
    	at PrintText.print(PrintText.java:109)
    	at sun.print.RasterPrinterJob.printPage(RasterPrinterJob.java:1973)
    	at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1461)
    	at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1277)
    	at PrintText.printer(PrintText.java:98)
    	at PrintText$1.run(PrintText.java:52)
    	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721)
    	at java.awt.EventQueue.access$200(EventQueue.java:103)
    	at java.awt.EventQueue$3.run(EventQueue.java:682)
    	at java.awt.EventQueue$3.run(EventQueue.java:680)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:691)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

    The code :

    Java Code:
        import java.awt.*;
        import java.awt.font.*;
        import java.awt.geom.*;
        import java.awt.print.*;
        import java.text.*;
        import java.io.*;
        import javax.swing.*;
        import java.util.List;
        import java.util.ArrayList;
        
        public class PrintText implements Printable {
        
             private List<String> list;
        
            // 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>();
                                String line;
                                while ((line = br.readLine()) != null) {
                                    System.out.println(line);
                                    list.add(line);
                                }
        
                                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) {
        
                System.out.println("About to obtain an attributed string, list=" + list);
                AttributedString mStyledText = new AttributedString(list);
                // etc
                /* 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;
            }
        }
    Last edited by west-wot; 12-23-2012 at 03:02 AM.

  2. #2
    pbrockway2 is offline Moderator
    Join Date
    Feb 2009
    Location
    New Zealand
    Posts
    4,574
    Rep Power
    12

    Default Re: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

    Java Code:
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at java.text.AttributedString.<init>(AttributedString.java:127)
        at PrintText.print(PrintText.java:109)
        etc
    You read the stack trace from the top down until you hit a line of your code. That's a good place to begin looking for the problem.

    In this case it's line 109 which I assume is this one:

    Java Code:
    AttributedString mStyledText = new AttributedString(mText);
    According to the API docs this constructor will throw a NullPointerException if you pass it a null string. It is easy to test if this is happening:

    Java Code:
    public int print(Graphics g, PageFormat format, int pageIndex) {
        System.out.println("About to obtain an attributed string, mText=" + mText);
        AttributedString mStyledText = new AttributedString(mText);
        // etc
    If it turns out that mText is, indeed, null you should go back through your code code to where you thought you had assigned it a non null value and figure out why that didn't happen.

  3. #3
    west-wot is offline Member
    Join Date
    Dec 2012
    Posts
    16
    Rep Power
    0

    Default Re: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

    Quote Originally Posted by pbrockway2 View Post
    You read the stack trace from the top down until you hit a line of your code. That's a good place to begin looking for the problem.

    In this case it's line 109 which I assume is this one:

    Java Code:
    AttributedString mStyledText = new AttributedString(mText);
    According to the API docs this constructor will throw a NullPointerException if you pass it a null string. It is easy to test if this is happening:

    Java Code:
    public int print(Graphics g, PageFormat format, int pageIndex) {
        System.out.println("About to obtain an attributed string, mText=" + mText);
        AttributedString mStyledText = new AttributedString(mText);
        // etc
    If it turns out that mText is, indeed, null you should go back through your code code to where you thought you had assigned it a non null value and figure out why that didn't happen.
    You are correct, it turned out to be mText=null

    i had thought that in the first part of my code :

    Java Code:
    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);
                            }
    Would give mText the value of the contents of the file, is this doing this correct?,

    Edit

    mText is equal to null to end the loop, i have had to use the list and pass this, hopefully this will work
    Last edited by west-wot; 12-23-2012 at 01:57 AM.

  4. #4
    pbrockway2 is offline Moderator
    Join Date
    Feb 2009
    Location
    New Zealand
    Posts
    4,574
    Rep Power
    12

    Default Re: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

    Yes, you are right: the text contents of the file end up in the list, not in mText. mText is a sort of "throw away" variable which is used to add a line to the list and, because of its temporary use, it might have been better to use a local variable in the method that did the reading. That way you would not have been tempted to use it elsewhere.

    AttributedString will want some text (a String), not a list. So you are going to hve to put the pieces of the list back together again. It might have been better to use something like a StringBuffer to hold text rather than a list of strings. (Unless you actually want the list elsewhere - I haven't looked at the code that closely).

  5. #5
    west-wot is offline Member
    Join Date
    Dec 2012
    Posts
    16
    Rep Power
    0

    Default Re: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

    i have now updated the original post with my current code, i am now having one issue where i can not compile the code, it gives me an error no suitable constructor found for AttributedString(java.util.List<java.lang.String>)

    i am told it is because i am passing the entire list of strings instead of a single string.

    how can i change my code so it can compile and work ?
    Last edited by west-wot; 12-23-2012 at 03:04 AM.

  6. #6
    pbrockway2 is offline Moderator
    Join Date
    Feb 2009
    Location
    New Zealand
    Posts
    4,574
    Rep Power
    12

    Default Re: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

    Did you understand what I said about reconstructing the text (as a String) from the list?

    Java Code:
    Make a string buffer
    for each string in the list
        add it to the string buffer
        add a newline to the buffer
    Obtain a String from the StringBuffer
    Alternatively, don't use a list at all. Instead read the text into a string buffer.

    Java Code:
    BufferedReader br = null;
    try {
        br = new BufferedReader(new FileReader(path));
        Create a string buffer
        String line;
        while ((line = br.readLine()) != null) {
            Append string to string buffer
            Append newline to string buffer
        }
        Obtain a String from the StringBuffer 
        printer(); // or whatever it takes to print the string
    } catch (IOException exp) {
        // etc
    The StringBuffer API docs might help. And/or look in Oracle's or some other tutorial for examples of StringBuffer usage.

    I have not really looked at the printing in detail, so I can't say more than that using a string buffer yields a string with more or less the content of the original file. So it's worth a try. There may be other problems with the printing, but it's a place to start.

    [Edit] And, please, don't edit code once it's posted. Other people reading the thread will have an impossible time figuring out what is what. No-one will mind if you post updated versions of the code: in fact, it's more or less expected.
    Last edited by pbrockway2; 12-23-2012 at 04:32 AM.

  7. #7
    west-wot is offline Member
    Join Date
    Dec 2012
    Posts
    16
    Rep Power
    0

    Default Re: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

    Ok thanks for all the help, the code is now working well with no errors :) thanks for all your guys help !

  8. #8
    pbrockway2 is offline Moderator
    Join Date
    Feb 2009
    Location
    New Zealand
    Posts
    4,574
    Rep Power
    12

    Default Re: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

    You're welcome.

Similar Threads

  1. Replies: 11
    Last Post: 09-24-2012, 04:37 AM
  2. Replies: 1
    Last Post: 12-13-2010, 04:19 PM
  3. Replies: 1
    Last Post: 08-20-2010, 11:42 AM
  4. Replies: 3
    Last Post: 04-30-2010, 08:44 PM
  5. Replies: 5
    Last Post: 08-26-2009, 12:37 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •