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

时间:2014-03-21 19:24:29

标签: java image validation text-files

我的程序是使用JOption窗格输入选项。这些选项(1或2)将链接到我在NetBeans项目中保存在我的包下的.txt文件。这就是我到目前为止所拥有的。我还将附加.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) Creeper\n2) 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

2 个答案:

答案 0 :(得分:0)

文件路径不正确。您可以将文件放在同一目录中,也可以提供完整路径,如:

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

另一个选择是将文件与源和:

放在一起
new File(Project.class.getResource(filename).toURI());

有关详细信息,请参阅this question

答案 1 :(得分:0)

1.确保文件路径正确。如果".java"文件与那些文本文件位于同一文件夹中,则上述代码中提到的路径可以正常工作。

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

您实际上在使用inputFile.nextInt(),它应该像fin.nextInt()。在switch case语句中使用的所有位置修改此内容。

相关问题