Jeg har forstået at når min java-applet på min hjemmeside skal snakke sammen med mit java-program der bliver kørt på localhost, så skal jeg bruge sockets.
Mit problem er, at når jeg indsætter min kode i min applet, starter den simpelt nok ikke. Den står bare ved Loading ... skærmen og kommer ikke videre. Hvis jeg gør så den først opretter forbindelsen senere (ved at aktiverer opretforbindelse() med et tastetryk), så svarer programmet ikke lige efter denne funktion er kørt.
Hvis jeg modsat opretter en forbindelse til min server hver gang jeg skal sende noget data, så virker det fint. Men det er ikke det jeg vil.
Hvordan kan jeg gøre sådan programmet stadig svarer, uden at oprette en ny forbindelse hver gang der skal sendes data?
Jeg har denne som funktion:
public void opretforbindelse(String brugernavn) {
try { Socket s = new Socket("localhost", 15964); netpw = new PrintWriter(s.getOutputStream(), true); netbr = new BufferedReader(new InputStreamReader(s.getInputStream()));
Jeg har prøvet at kalde funktionen i start, init og ved tastetryk, men der er ingen forskel. Programmet står fast (forskellen er dog at programmet slet ikke bliver "paintet" hvis den er i start eller init).
Når jeg compiler scriptet melder den ingen fejl, og det gør den heller ikke når jeg kører scriptet.
Men når jeg trykker på en tast (det er det som kalder funktionen opretforbindelse("mikze"), så fryser både firefox OG java-console fast (det nytter ikke noget hvis jeg bruger IE i stedet for). Men hvis jeg så trykker på kryds, altså lukker serveren, som IKKE kører over applet, så svarer appletten igen, men der er ikke kommet nogle fejlmeddelelser i Java Console, udover "Connection Reset".
Når jeg trykker på tasten modtager serveren i øvrigt godt den første kommando, og udskriver at den valgte bruger logger ind.
Jeg tænker lidt over om det kan være den while() som er inde i try'en som er i opretforbindelse(). Altså at netbr.readline() aldrig bliver null? Om der måske inde i whilen skal sættes: line = netbr.readLine(); som jeg mener at have set før?
Eller måske fordi at appletten ikke gider at "painte" før den while er færdig, og den derved bliver ved med at tænke den while igennem og fryser fast?
Men nu er vi da mere sikre på hvad problemet er :-)
Jeg har prøvet at fjerne hele den der while(), og så fryser appletten ikke. Men ingen af dine eksempler virker (hvilket jeg også synes som mærkeligt da jeg godt kan læse den kode) :P
Nej det skal du skal ikke, prøver lige pt at lave et eksempel med en tråd, men kan bare ikke få det til at fungere - det er din BufferedReader som låser.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.