Child pages
  • Swing , ServerSocket, Thread
Skip to end of metadata
Go to start of metadata

Sziasztok,

Elnézést mindenkitől. Elég kezdő vagyok. Van egy házi feladatom és elakadtam. Egy X0 játékot csinálok, meg is van. De mivel hálózaton kell neki működni vannak gondjaim. Létrehozom a main-ben a ServerSocket-et, és ki rakom egy szálba az accept -el.

kb így:

XO Felulet = new XO();
Felulet.setVisible(true);
ServerSocket ss=null;
try {
    System.out.println("Létre hozom az ss -t");
    ss=new ServerSocket(lPort);
    System.out.println("Létre hozva az ss");
} catch (IOException ex) {
    Logger.getLogger(XO.class.getName()).log(Level.SEVERE, null, ex);
}

try {
    System.out.println("Következő sorban indul a szál");
    new Szal(ss.accept()).start(); // <-- itt
    System.out.println("A szál elindult");
} catch (IOException ex) {
    Logger.getLogger(XO.class.getName()).log(Level.SEVERE, null, ex);
}

A gondom az, hogy a kiemelt sor-tól ki akad. A Szal az egy belső osztály (alosztály) így kezdődik:

static class Szal extends Thread implements Runnable {
}

Az osztály már nem hívódik meg. A konstruktorába a System.out.println() már nem hívódik meg, illetve a JFrame -emen sem látszik semmi. Azt értem, hogy az accept blokkolva tartja egy kliens kapcsolatig a szálat, DE miért nem látszik semmi a Swing-ben ? Olyan mintha a thread nem is indulna. Próbáltam azt is hogy nem adok át semmit a Szal konstruktorába és ott indítom el a ServerSocket accept-et. De minden maradt ugyanúgy. Ha ki kommentelem a kiemelt sort akkor tökéletesen látszik, és működik minden a JFrame -en.

Kérnék egy kis út mutatást.

Köszönöm

      
      
Page viewed times

5 Comments

  1. Biztos ír egy stacktrace-t, abból idézhetnél.

  2. Szia Gábor.

    Nagyon köszi a formázást.

    Sajnos nincs StackTrace (sad) Hiba nélkül fut, illetve futna.

    Íme a két build screenshotja. 

    Untitled.png

    Untitled2.png

     

     

    1. Nem fogom legépelni a képben látható forrást, de:

      public void run() {
          try {
              XO Felulet = ...
      // ... és a többi
              System.out.println("A szál elindult");
          catch (Exception ex) {
              Logger.getLogger(XO.class.getName()).log(Level.SEVERE, ex.toString(), ex);
          }
      }

      És itt nézd meg, hogy kiír-e valamit.

  3. Anonymous

    Mármint, miután kapcsolódott valaki hozzá, akkor utána nem hívódik meg a konstruktor ? Mert, lehet, hogy csak az a baj, hogy azt képzeled, hogy már az ss.accept() is az új szálban indulna, noha nem.

    1. Az accept-et indítottam a konstruktorból is.

      Kipróbáltam, de nem hozott eredményt.

      Végül is megoldódott.

      Köszi szépen a segítséget.

      Azt csináltam , hogy írtam egy külön osztályt (szerver), és abból indítom a szállat, így a swing -is futt, és a szerver osztály a thread jével együtt nyugodtan várhatja a connect-et.