Проблема FileNotFoundException - PullRequest
       22

Проблема FileNotFoundException

1 голос
/ 20 февраля 2011

Я только что закончил читать «Java для чайников» и начал создавать простую POS-программу.У меня были проблемы с тем, чтобы заставить программу делать то, что я хочу!У меня есть два actionListener, связанных с каждой из следующих кнопок, «Amigos» и «Fosters».У меня также есть два текстовых поля, одно из которых показывает цену отдельного напитка, а другое используется для промежуточного итога.У меня была общая сумма, чтобы сложить кратные количества одного и того же напитка, но не «Амигос» с «Фостерс».Это было запрограммировано, пытаясь поделиться общей суммой переменной.Я пытался обойти свое любительское программирование на Java, читая и записывая в один текстовый файл, но это оказалось трудным и для меня!Ниже мой код пытается реализовать мою работу по чтению и записи.

Это моя первая в истории Java-программа, поэтому, пожалуйста, прости формат, пунктуацию и соглашения Java, я ошибся.Также прости меня за отсутствие комментариев.Любой совет с благодарностью!

С уважением

Луи

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.text.NumberFormat;
import java.io.FileNotFoundException;

class till_v2 {

    public static void main(String args[]) {

        JFrame frame;
        Container content_pane;
        JTextField textField, subTotal;
        JButton b1Amigos, b2Fosters;
        FlowLayout layout;

        frame = new JFrame();
        frame.setTitle("Louis' Till");

        content_pane = frame.getContentPane();

        textField = new JTextField("Price displayed here.",15);
        subTotal = new JTextField("Sub-Total.", 5);

        b1Amigos = new JButton("Amigos");
        b1Amigos.addActionListener(new AmigosAL(textField));
        b1Amigos.addActionListener(new subTotalAmigosUD(subTotal));

        b2Fosters = new JButton("Fosters");
        b2Fosters.addActionListener(new FostersAL(textField));
        b2Fosters.addActionListener(new subTotalFostersUD(subTotal));

        content_pane.add(textField);
        content_pane.add(subTotal);
        content_pane.add(b1Amigos);
        content_pane.add(b2Fosters);
        layout = new FlowLayout();
        content_pane.setLayout(layout);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);

    }
}

class subTotalFostersUD implements ActionListener {

    JTextField subTotal;
    int itemPrice;
    double sub_total;
    SUBTOTAL SUBTOTALobject = new SUBTOTAL();

    subTotalFostersUD(JTextField subTotal) {
        this.subTotal = subTotal;
    }
    //The problem could be here!
    public void actionPerformed(ActionEvent e) {
        try {
            itemPrice = 320;
            sub_total = SUBTOTALobject.SUBTOTAL(itemPrice);
            subTotal.setText("£"+sub_total);
        }

        catch (FileNotFoundException err) {
            System.out.println("1!");
        }
    }
}

class subTotalAmigosUD implements ActionListener {

    JTextField subTotal;
    int itemPrice;
    double sub_total;
    SUBTOTAL SUBTOTALobject = new SUBTOTAL();

    subTotalAmigosUD(JTextField subTotal) {
        this.subTotal = subTotal;
    }
    //Same problem as above!
    public void actionPerformed(ActionEvent e) {
        try {
            itemPrice = 330;
            sub_total = SUBTOTALobject.SUBTOTAL(itemPrice);
            subTotal.setText("£"+sub_total);
        }

        catch (FileNotFoundException err) {
            System.out.println("2!");
        }
    }
}

class AmigosAL implements ActionListener {

    JTextField textField;

    AmigosAL(JTextField textField) {
        this.textField = textField;
    }

    public void actionPerformed(ActionEvent e) {
        textField.setText("£3.30");
    }
}


class FostersAL implements ActionListener {

    JTextField textField;

    FostersAL(JTextField textField) {
        this.textField = textField;
    }

    public void actionPerformed(ActionEvent e) {
        textField.setText("£3.20");
    }
}

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.io.*;

//The problem could be here!
public class SUBTOTAL {
    BufferedReader in;
    BufferedWriter out;
    int pennies;
    int itemPrice;
    public double sub_total;        

    public double SUBTOTAL(int itemPrice) throws FileNotFoundException {
        try {
            in = new BufferedReader(new FileReader("sub_total.txt"));
            pennies = Integer.parseInt(in.readLine());
            pennies = pennies + itemPrice;
            in.close();
        }

        catch(IOException e) {
            System.out.println("3!");
        }

        try {
            out = new BufferedWriter(new FileWriter("sub_total.txt"));
            out.write(pennies);
            out.close();
        }

        catch(IOException e){
            System.out.println("4!");
        }

        sub_total = pennies;
        sub_total = sub_total / 100;
        return sub_total;   
    }
}

Ответы [ 2 ]

3 голосов
/ 20 февраля 2011

вы получаете эту ошибку, потому что вам не хватает файла sub_total.txt

создать этот файл с желаемым содержимым. В той же папке, где у вас есть .class файл.

1 голос
/ 20 февраля 2011

Как сказал Вивек, это должно решить вашу проблему.

Но тогда вы получите NumberFormatException

out.write(pennies); записывает в файл в int типе данных, указывая символ для записи.

Но промежуточный итог может быть более чем одним символом , (промежуточный итог увеличивается при увеличении количества элементов).

Когда промежуточный итог превышает символ, он записывает значения барахла в sub_total.txt текстовый файл

Integer.parseInt(in.readLine()); пытается прочитать данные как String и разобрать их в int, который

Результаты в NumberFormatException


Решение:

Запишите данные в файл как String

PrintWriter txt = new PrintWriter(out);
txt.print(pennies);
txt.close();

вместо out.write(pennies); и прочитайте данные как

pennies = Integer.parseInt(in.readLine());


И помните, что перед запуском вашей программы не забудьте сохранить целочисленное значение в sub_total.txt

...