Witam, mam mały problem. Otóż napisałem sobie niedawno taki mały programik w konsoli. Niektóre z jego funkcji to było właśnie odczytywanie wartości z pliku txt ( liczba double ) i po małych modyfikacjach podczas działania programu zapisywanie nowej wartości do pliku. Robiłem to tak :
Do odczytu :
File file = new File("stan.txt");
Scanner in = new Scanner(file);
in.useLocale(new Locale("en"));
stan = in.nextDouble();
Do zapisu :
PrintWriter zapis = new PrintWriter("stan.txt");
zapis.println(dStan);
zapis.close();
No i dobrze wszystko działało. Ale teraz chciałbym napisać ten sam program ale już okienkowy, przy użyciu javax swing i tu w pewnym momencie pojawia się problem. Próbowałem zrobić aby po wpisaniu wartości do textfielda ( np. 50 ,double dWpl ) i kliknięciu buttona "Dodaj", dodana została liczba 50 do stanu który załóżmy że na początku miał wartość 10, to po kliknięciu miał 60 i zapisywał się do pliku .txt. Tak więc stworzyłem textfielda(tfWplata) i buttona(bWplata). Buttonowi dałem ActionListener i w actionPerformed dodałem :
Object obiekt = e.getSource();
dWpl = Double.parseDouble(tfWplata.getText()); // do zmiennej double przypisuje wartość z textfielda
if(obiekt == bWplata)
{
dStan+=dWpl; // zwiększam stan o wartość z textfielda
lStan.setText(String.valueOf(dStan + " zł")); // wyświetlam w label nową wartość
PrintWriter zapis = new PrintWriter("stan.txt"); // no i próbuje zapisać...
zapis.println(dStan + 50);
zapis.close();
}
A błąd wyskakuje w tej linii :
PrintWriter zapis =__ new PrintWriter("stan.txt");__
A ten błąd to :
Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem:
Unhandled exception type FileNotFoundExceptionat Cele.actionPerformed(Cele.java:172)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Wychodzi na to że muszę dopisać do
public void actionPerformed(ActionEvent e) {
(bo tam znajduje się moje zapisywanie)
throws FileNotFoundException
Ale to nic nie daje. Wciąż jest tak jakby nie mógł odczytać tego pliku stan.txt. Umieściłem go we wszystkich folderach projektu a nawet wcześniej... Jakieś pomysły?
P.S: Używam Eclipse
@Edit
Eclipse podpowiedział mi takie rozwiązanie :
PrintWriter zapis = null;
try {
zapis = new PrintWriter("stan.txt");
} catch (FileNotFoundException e1) {
zapis.println(dStan + dWpl);
zapis.close();
e1.printStackTrace();
}
Ale to całkowicie czyści mi stan.txt...