title: main(String args[]) already defined in class
body: <p>i have been trying to create a little java program that all it does is allow the user to select a txt file and then to print out the file to a printer,</p>
  
  <p>below is the code : i have tried to compile it but i get the error  main(String args[]) already defined in class, this code was working before i added in the top piece of code that allows the user to select a fie, also will what i am trying to do even work ? all i am trying to do is print to a printer the contents of a txt file then ill be done :)</p>
  
  <pre><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.*;
  
  public class PrintText implements Printable {
  
  
      // 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 {
  
          //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")); 
  
          FileReader fr = new FileReader(path); 
          BufferedReader br = new BufferedReader(fr); 
          String mText; 
          while((mText = br.readLine()) != null) { 
              //Displays the contents of the file in terminal
              System.out.println(mText); 
          } 
          //fr.close(); 
           }
  
  
          //private static final String mText = 
          //    "This is a test to see if this text will be printed "; //This works perfectly fine
  
          private static final AttributedString mStyledText = new AttributedString(mText);
  
  
      /**
       * Print a single page containing some sample text.
       */
      static public void main(String args[]) {
          /* 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(new PrintText(), 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() &lt; 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;
      }
  }
  </code></pre>
  
  <p>Below is the renamed version, however i am getting a new error message : cannot find symbol variable mText</p>
  
  <p>and highlighiting this line of code :</p>
  
  <pre><code>    private static final AttributedString mStyledText = new AttributedString(mText);
  </code></pre>
  
  <p>improved code :</p>
  
  <pre><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.*;
  
  public class PrintText implements Printable {
  
  
      // 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 {
  
          //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")); 
  
          FileReader fr = new FileReader(path); 
          BufferedReader br = new BufferedReader(fr); 
          String mText; 
          while((mText = br.readLine()) != null) { 
              //Displays the contents of the file in terminal
              System.out.println(mText); 
          } 
          //fr.close(); 
      } 
  
  
          //private static final String mText = 
          //    "This is a test to see if this text will be printed "; //This works perfectly fine
  
          private static final AttributedString mStyledText = new AttributedString(mText);
  
  
  
      /**
       * Print a single page containing some sample text.
       */
      static public void printer(String args[]) {
          /* 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(new PrintText(), 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() &lt; 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;
      }
  }
  </code></pre>