2012-12-22 14 views
-5

中定義的main(String args [])我一直在試圖創建一個小小的java程序,它所做的只是允許用戶選擇一個txt文件,然後將該文件打印到打印機,已在類

下面是代碼:我試圖編譯它,但我得到了在類中已經定義的錯誤main(String args []),這個代碼在我添加在允許用戶選擇fie,我也會努力做甚麼工作?所有我試圖做的是打印到打印機一個txt文件,然後生病做:)

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() < 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; 
    } 
} 

下面是重命名的版本,但我得到一個新的錯誤消息的內容:找不到符號變量MTEXT

和highlighiting這行代碼:

private static final AttributedString mStyledText = new AttributedString(mText); 

改進的代碼:

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() < 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; 
    } 
} 
+2

你有兩種主要的方法定義在你的代碼中...... – freedev

+0

*「選擇一個txt文件,然後將文件打印到打印機」*另請參閱['Desktop.print(File)'](http:/ /docs.oracle.com/javase/7/docs/api/java/awt/Desktop.html#print%28java.io.File%29),以獲得適用於文本文件,圖像的更通用的'單行' ,HTML,Word文檔,.. –

回答

3

這個錯誤正是它說的:你有兩個main(String[])方法。每個班級只能有一個具有給定名稱和簽名的方法。所以你必須以某種方式解決你的代碼,這使得持有。 (即重命名的方法之一,對於初學者。)

+0

謝謝我已經重新命名我的一個方法,現在我得到一個新的錯誤,無法找到符號變量mText – user1892955

0

一個主要的方法開始是這樣的:

static public void main(String args[]) { 
... 
... 
} 

主要方法是入口點到應用程序。您應該只有一個,以便您的應用程序知道從哪裏開始。 您目前擁有這些方法,這就是您的應用程序無法運行的原因。