Java 类中已定义main(字符串args[])

Java 类中已定义main(字符串args[]),java,Java,我一直在尝试创建一个小java程序,它只允许用户选择一个txt文件,然后将文件打印到打印机上 下面是代码:我试图编译它,但是我得到了类中已经定义的错误main(String args[]),这段代码在我添加到允许用户选择fie的代码的顶部之前是有效的,我尝试做的也会有效吗?我所要做的就是把txt文件的内容打印到打印机上,然后我就可以完成了:) 改进代码: import java.awt.*; import java.awt.font.*; import java.awt.geom.*;

我一直在尝试创建一个小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 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;
    }
}
import java.awt.*;
导入java.awt.font.*;
导入java.awt.geom.*;
导入java.awt.print.*;
导入java.text.*;
导入java.io.*;
导入javax.swing.*;
公共类PrintText实现了可打印的{
//下面的代码将允许用户选择一个文件,然后打印出文件的内容
公共静态void main(字符串[]args)引发IOException{
//选择文件
JFileChooser chooser=新的JFileChooser();
chooser.showOpenDialog(空);
File File=chooser.getSelectedFile();
字符串文件名=file.getName();
//System.out.println(“您已选择:“+filename”);测试所选文件是否正确
字符串路径=file.getAbsolutePath();
//将文件内容读入终端
//FileReader fr=新的FileReader(“文件名”);
//FileReader fr=新的FileReader(“D:/Documents/“+”filename”);
FileReader fr=新的FileReader(路径);
BufferedReader br=新的BufferedReader(fr);
字符串多行文字;
而((mText=br.readLine())!=null){
//在终端中显示文件的内容
System.out.println(多行文字);
} 
//fr.close();
} 
//私有静态最终字符串多行文字=
//“这是一个测试,看看这个文本是否会被打印出来”;//这很好用
私有静态最终AttributeString mStyledText=新AttributeString(多行文字);
/**
*打印包含一些示例文本的单个页面。
*/
静态公用无效打印机(字符串参数[]){
/*获取当前打印机和打印机的表示形式
*当前打印作业。
*/
PrinterJob PrinterJob=PrinterJob.getPrinterJob();
/*创建一本包含成对页面绘制者的书(可打印)
*和页面格式。此示例有一个包含
*文本。
*/
书=新书();
book.append(新的PrintText(),新的PageFormat());
/*将要打印的对象(书本)设置为PrinterJob。
*在打开“打印”对话框之前执行此操作将允许
*“打印”对话框以正确显示要打印的页面范围
*以及不允许任何不适合的打印设置
*要打印的页面。
*/
printerJob.setPageable(书本);
/*向用户显示打印对话框。这是可选步骤
*如果应用程序想要执行,则不需要执行
*“安静”打印。如果用户取消打印对话框,则为false
*返回。如果返回true,则继续打印。
*/
布尔doPrint=printerJob.printDialog();
if(doPrint){
试一试{
printerJob.print();
}捕获(PrinterException异常){
System.err.println(“打印错误:+异常”);
}
}
}
/**
*打印一页文本。
*/
公共整型打印(图形g、页面格式、整型页面索引){
/*我们假设Jav2D是可用的。
*/
Graphics2D g2d=(Graphics2D)g;
/*将原点从纸张的一角移动到另一角
*可成像区域的面积。
*/
translate(format.getImageableX(),format.getImageableY());
/*设置文本颜色。
*/
g2d.setPaint(颜色:黑色);
/*使用LineBreakMeasurer实例将文本拆分为
*适合页面可成像区域的行。
*/
Point2D.Float pen=新的Point2D.Float();
AttributedCharacterIterator charIterator=mStyledText.getIterator();
LineBreakMeasurer measurer=新的LineBreakMeasurer(charIterator,g2d.getFontRenderContext());
float wrappingWidth=(float)format.getImageableWidth();
while(measurer.getPosition()
这个错误就是它所说的:您有两个
main(String[])
方法。每个类中只能有一个具有给定名称和签名的方法。因此,您必须以某种方式修复代码,使其保持稳定。(首先,重命名其中一个方法。)

主方法的开头如下:

static public void main(String args[]) {
...
...
}
主方法是应用程序的入口点。您应该只有一个,以便应用程序知道从哪里开始。
您目前有许多这样的方法,这就是您的应用程序无法运行的原因。

您的代码中定义了两个主要方法……”“选择一个txt文件,然后将文件打印到打印机上”另请参阅一个更通用的“一行程序”,该程序适用于文本文件、图像、HTML、Word文档……谢谢我重命名了我的一个方法,现在我得到一个新的错误,找不到符号变量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;
    }
}
static public void main(String args[]) {
...
...
}