通过从文本文件中读取数字来输出绘制的图像



我的程序是使用JOption窗格输入一个选项。这些选项(1或2)将被链接到一个.txt文件,该文件已保存在我的NetBeans项目中的包下。这是我目前得到的。我还将附加.txt文件,其中嵌入了我的程序应该读取和输出的数字。任何帮助都非常感谢!我的输入陷阱/JOption窗格工作得很好。但我有一个错误时,读取文件。

run:
error opening the filecreeper.txt
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)

这是当前的输出。

package project;
import java.awt.Color;
import javax.swing.JFrame;
import java.awt.Graphics; 
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import javax.swing.JOptionPane;
public class Project extends JFrame{
private static final String filename1 = "creeper.txt";
private static final String filename2 = "sun.txt";
private static final int FRAME_SIZE = 700;
private String filename;
private String stringName;
private String COLOR;
private String LINE;
private String OVAL;
private String FILLEDOVAL;
private String RECTANGLE;
private String FILLEDRECTANGLE;
int i;
Scanner inputFile = new Scanner(System.in);
public static void main(String[] args){
Project p = new Project();   
 }
Scanner fin = null;
@Override
public void paint(Graphics g) {
    Graphics canvas = this.getContentPane().getGraphics();
    int num1;
    int num2;
    int num3;
    int num4;
    int color1;
    int color2;
    int color3;
    try{
       fin = new Scanner(new File(filename));
    }catch(FileNotFoundException e){
            System.err.println("error opening the file" + filename);
            System.exit(1);
    }while (fin.hasNext()){
            String reader = fin.next();
    switch(stringName){
        case "COLOR":
            color1 = inputFile.nextInt();
            color2 = inputFile.nextInt();
            color3 = inputFile.nextInt();
            canvas.setColor(new Color (color1, color2, color3));
            break;
        case "LINE":
            num1 = inputFile.nextInt();
            num2 = inputFile.nextInt();
            num3 = inputFile.nextInt();
            num4 = inputFile.nextInt();
            canvas.drawLine(num1, num2, num3, num4);
            break;
        case "OVAL":
            num1 = inputFile.nextInt();
            num2 = inputFile.nextInt();
            num3 = inputFile.nextInt();
            num4 = inputFile.nextInt();
            canvas.drawOval(num1, num2, num3, num4);
            break;
        case "FILLEDOVAL":
            num1 = inputFile.nextInt();
            num2 = inputFile.nextInt();
            num3 = inputFile.nextInt();
            num4 = inputFile.nextInt();
            canvas.fillOval(num1, num2, num3, num4);
            break;
        case "RECTANGLE":
            num1 = inputFile.nextInt();
            num2 = inputFile.nextInt();
            num3 = inputFile.nextInt();
            num4 = inputFile.nextInt();
            canvas.drawRect(num1, num2, num3, num4);
            break;
        case "FILLEDRECTANGLE":
            num1 = inputFile.nextInt();
            num2 = inputFile.nextInt();
            num3 = inputFile.nextInt();
            num4 = inputFile.nextInt();
            canvas.fillRect(num1, num2, num3, num4);
            break;
    }
        }
}
public Project() {
    String valueString;
    int input = 0;
    do{//input error trap
    valueString = JOptionPane.showInputDialog("Choose your file:n1) Creepern2) Sun");
    try{
    input = Integer.parseInt(valueString);
    }catch (NumberFormatException e){
    }
    } while ((input != 1) && (input != 2));
    switch(input){
        case 1:
            filename = filename1;
            break;
        case 2:
            filename = filename2;
            break;
    }
    setSize(700, 700);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setLocationRelativeTo(null);
    setVisible(true);
}
}

creeper.txt
COLOR 0 161 94
FILLEDRECTANGLE 0 0 1000 1000
COLOR 0 0 0
FILLEDRECTANGLE 125 100 150 150
FILLEDRECTANGLE 425 100 150 150
FILLEDRECTANGLE 275 250 150 250
FILLEDRECTANGLE 200 325 75 250
FILLEDRECTANGLE 425 325 75 250

sun.txt
COLOR 255 255 128
FILLEDOVAL 200 200 200 200
COLOR 0 0 0
OVAL 200 200 200 200
LINE 200 200 10 50
LINE 200 400 10 550
LINE 400 200 550 10
LINE 400 400 650 650
COLOR 255 100 100
LINE 300 450 300 650
LINE 450 300 670 300
LINE 300 150 300 10
LINE 150 300 10 300

1。确保文件路径正确。如果".java"文件与这些文本文件在同一文件夹中,则上述代码中提到的路径有效。

2。我在下面的代码中发现了一个错误,其余的代码看起来很好。

你实际上使用的是inputFile.nextInt(),它应该像fin.nextInt()。在switch case语句中使用的所有地方修改它。

文件路径错误。您可以将这些文件放在同一个目录中,或者提供完整的路径,如

private static final String filename1 = "C:/Users/Foo/creeper.txt";

另一个选项是将文件与源文件放在一起:

new File(Project.class.getResource(filename).toURI());

最新更新