[ Milan34 @ 10.06.2016. 20:00 ] @
Pozdrav. Jedan dio koda mi ne radi. Aplikacija je za rad sa knjigama. Prilikom iznajmljivanja knjige, kada je uspjesno iznajmim ( prilikom setovanja akcije za dugme iznajmi, povezujem se na server, ako knjiga sa tim imenom postoji, server vraca OK i na ekranu iskace poruka sa iznajmljivanjem), tada se ta knjiga zakljucava na random vrijeme izmedju 20 i 50 sekundi. Kada knjiga opet postane dostupna, korisniku se ispisuje poruka da je dostupna. E sad, uradio sam sve to, moj server je mutli thread, prilikom iznajmljivanja napravim novi tred koji ce spavati odredjeno vrijeme, i poslije isteka vremena saljem klijentu poruku na osnovu koje ce on ispisati da je knjiga opet dostupna. Problem je sto mi , kad iz tog treda na serveru posaljem klijentu poruku, tu pukne konekcija, baci se izuzetak java.net.ConnectException: Connection refused: connect. Dio koda koji obradjuje iznajmljivanje, na serveru: Code: //u konstruktoru klase su kreirani oos i ois objekti klasa ObjectOutputStream i ObjectInputStream, respektivno String request = (String)ois.readObject(); //...dio koda za obradu drugih zahtjeva //obrada zahtjeva za pretragu knjige if(request.startsWith("RENT")) { //uz rent sa klijenta se salje i username pa zato split String[] strings = request.split("#"); for(int i = 0; i < Server.bookList.size(); i++) { if(Server.bookList.get(i).getBookName().equals(strings[1]) && Server.bookList.get(i).getIsItAvailable()) { oos.writeObject("OK"); oos.flush(); Server.bookList.get(i).setIsItAvailable(false); // u klasi Knjiga imam bool atribut isItAvailable final Knjiga knjiga = Server.bookList.get(i); System.out.println(request); new Thread() { public void run() { System.out.println("USLO U TRED!"); try { Random r = new Random(); int rand = r.nextInt(30000) + 20000; Thread.sleep(rand); knjiga.setIsItAvailable(true); String name = knjiga.getBookName(); oos.writeObject("AVAILABLE" + "#" + name); // ovde puca, ne posalje ovo System.out.println("Poslije vrajt objekta"); } catch (Exception ex) { ex.printStackTrace(); } } }.start(); oos.flush(); } else { oos.writeObject("ERROR"); } } } //... jos koda za obradu zahtjeva :) oos.close(); ois.close(); sock.close(); Sa klijentske strane dio koda koji obradi rezultate Code: rent.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { try { InetAddress addr = InetAddress.getByName("127.0.0.1"); Socket socket = new Socket(addr, TCP_PORT); ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream()); ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); for(int i = 0; i < purchasedBooks.size(); i++) { if(purchasedBooks.get(i).getChecked()) { oos.writeObject("RENT" + "#" + purchasedBooks.get(i).getBookName()); String read = (String) ois.readObject(); if(read.equals("OK")) { Alert alert = new Alert(AlertType.INFORMATION); alert.setTitle("Obavjestenje"); alert.setContentText("Uspjesno ste iznajmili knjigu."); alert.showAndWait(); } else if(read.equals("ERROR")){ Alert alert = new Alert(AlertType.WARNING); alert.setTitle("Obavjestenje"); alert.setContentText("Knjiga je vec iznajmljena, probajte ponovo za minut"); alert.showAndWait(); } else { String string = (String) ois.readObject(); System.out.println(string); String strings[] = string.split("#"); Alert alert = new Alert(AlertType.INFORMATION); System.out.println(strings[1]); alert.setTitle("Obavjestenje"); alert.setContentText("Knjiga " + strings[1] + "je ponovo dostupna za iznajmljivanje."); alert.showAndWait(); } } } oos.close(); ois.close(); socket.close(); } catch(Exception e) { e.printStackTrace(); } } }); |