metoda start()

IJ
  • Rejestracja:około 7 lat
  • Ostatnio:około 6 lat
  • Postów:139
0

Witam. Mam taki prosty serwer (jeszcze nie jest skończony):

Kopiuj
import java.io.*;
import java.net.*;
import java.time.LocalTime;
import java.time.temporal.ChronoUnit;
import static java.time.LocalDate.now;

public class ServerApp
{
    String name = "Server";


        public class Watek1 implements Runnable
        {

            @Override
            public void run() {
                LocalTime minutes = LocalTime.now();
                minutes = minutes.truncatedTo(ChronoUnit.MINUTES);

                try {

                    ServerSocket s = new ServerSocket(3001);
                    System.out.println("Czekamy na połączenie...");
                    Socket server = s.accept();

                    DataOutputStream dos2 = new DataOutputStream(server.getOutputStream());
                    dos2.writeUTF("(" + String.valueOf(minutes) + ")" + name + ": " + "Klient został podłączony " + server.getInetAddress().getHostName());

                    System.out.println(("Klient został podłączony " + server.getInetAddress().getHostName()));

                } catch (IOException e) {
                    System.out.println("error: IOException");
                }
            }
        }


        public static void main(String[] args)
        {
            
        }



}

Czytałem, że aby uruchomić kod w wątku trzeba zastosować metodę start(), ale mi to nie działa (tzn. świeci się na czerwono). Gdzie i jak mam zastosować metodę start() aby włączyć wątek?

jarekczek
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Siemianowice Śląskie
  • Postów:500
3

Nie, no pliz. Nie mów do nas "świeci na czerwono". Jak nie widzisz żadnego komunikatu, to daj sobie spokój z tą zabawą. Nie programuje się po kolorach, tylko po komunikatach błędów.


Przeważnie ignoruję niezarejestrowanych użytkowników.
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 9 godzin
0

Do wątków jest klasa Thread.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
IJ
  • Rejestracja:około 7 lat
  • Ostatnio:około 6 lat
  • Postów:139
0

Error:(40, 19) java: cannot find symbol
symbol: method start()
location: class ServerApp.Watek1

lub

Error:(10, 21) java: <identifier> expected

Może zacznijmy od tego, że nie jestem pewny jak mam tą metodę wykorzystać. Gdzie mam ją umieścić i jak ma wyglądać?

edytowany 1x, ostatnio: IlikeJava
jarekczek
Przyznaję, moja odpowiedź była słaba. Ale masz już Wibowita, i więcej już powiedzieć nie możemy :)
jarekczek
Przecież w google jak wpiszesz "java start wątek" to wszystko masz. Nie szkoda czasu na takie posty?
IJ
  • Rejestracja:około 7 lat
  • Ostatnio:około 6 lat
  • Postów:139
0

Dobrze... ale co robię źle? Możecie luknąć na kod? Dla takich ekspertów od Javy nie powinno to stanowić problem.

rubaszny_karp
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:152
0

small data and high latency
IJ
  • Rejestracja:około 7 lat
  • Ostatnio:około 6 lat
  • Postów:139
0

Dzięki @rubaszny_karp. Pokazuje mi błąd IOException. Gdzie mam dodać to IOException aby wszystko działało? Próbowałem z każdą klasą w kodzie.

Kopiuj
import java.io.*;
import java.net.*;
import java.time.LocalTime;
import java.time.temporal.ChronoUnit;
import static java.time.LocalDate.now;

public class ServerApp
{

    public static class MyRunnable implements Runnable
    {

        @Override
        public void run() 
        {
            String name = "Server";

            LocalTime minutes = LocalTime.now();
            minutes = minutes.truncatedTo(ChronoUnit.MINUTES);

            try
            {

                ServerSocket s = new ServerSocket(3001);
                System.out.println("Czekamy na połączenie...");
                Socket server = s.accept();

                DataOutputStream dos2 = new DataOutputStream(server.getOutputStream());
                dos2.writeUTF("(" + String.valueOf(minutes) + ")" + name + ": " + "Klient został podłączony " + server.getInetAddress().getHostName());

                System.out.println(("Klient został podłączony " + server.getInetAddress().getHostName()));

            }
            catch (IOException e)
            {
                System.out.println("error: IOException");
            }
        }


    }

    public static void main(String[] args)
    {
        Thread myThread = new Thread(new MyRunnable(), "MyThread");
        myThread.getName();
        myThread.start();
    }

}

lukaszek016
  • Rejestracja:około 9 lat
  • Ostatnio:ponad rok
  • Postów:249
0

Nie zrozum mnie źle, ale chyba powinieneś najpierw poczytać o programowaniu obiektowym.

Powiedz szczerze robiłeś wcześniej coś w Javie chociaż jakiś kurs podstaw? Bo z tego co widzę nie wiesz do końca jak ten program będzie działał. Z tego co można wyczytać z kodu, utworzysz serwer w oddzielnym wątku, klient się połączy, serwer wyśle mu komunikat, sam wyświetli info i program zakończy swoje działanie. Czyli mało tego, że nie będzie opcji podłączenia dwóch klientów na raz, w ogóle nie będzie możliwości połączenia dwóch klientów. No chyba, że o to Ci chodziło.

edytowany 1x, ostatnio: lukaszek016
jarekr000000
@lukaszek016:Nie zrozum mnie źle, ale chyba powinieneś najpierw poczytać o programowaniu obiektowym, o klasach statycznych. a potem popraw co nakłamałeś.
lukaszek016
Ok, fakt nie wczytałem się :P Przynajmniej jeśli chodzi o tę klasę wewnętrzną. Chyba, że jakąś głupotę palnąłem w dalszej części postu to mnie możesz poprawić. Ale i tak moim zdaniem powinien to "wyrzucić" do zewnętrznej klasy.
jarekr000000
Teraz jest dobrze.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.