Avatar billede onkel_satan Nybegynder
20. september 2005 - 15:17 Der er 10 kommentarer og
1 løsning

Kald interface fra static main()

Får fejlen "Non static variable this cannot be referenced from a static context"
Har lige søgt igennem tidligere indlæg for at se om jeg kunne finde en løsning der og min forståelse for det er som følger. Non-static vars kan ikke tilgås fra static main. ok so far so good. Hvis man vil tilgå non-static vars fra static main må man tilgå den via. en instance af et objekt.
Nu er jeg så ikke 100% om det oxo gælder når man instanciere et objekt igennem et interface ?

Her er min kode:
public class Server{
   
    public static void main(String[] args) {
        int threadCount = 0;       
        try{
            ServerSocket welcomstSocket = new ServerSocket(2222);
            System.out.println("Server socket initialized");
            while(true){
                Socket connection = welcomstSocket.accept();
                Runnable runner = new Worker(connection);
                Thread newThread = new Thread(runner);
                newThread.start();
            }
        }catch(Exception err){
        }
    }

det er "Runnable runner = new Worker(connection);" som den ikke er glad ved.

Nogen der kan hjælpe ?
Avatar billede erikjacobsen Ekspert
20. september 2005 - 15:24 #1
Måske er det connection, der er ikke-statisk?
Avatar billede erikjacobsen Ekspert
20. september 2005 - 15:25 #2
Doh - den stod i linien ovenover ... ;)
Avatar billede onkel_satan Nybegynder
20. september 2005 - 15:28 #3
Ja, men connection er jo en instance af et Socket objekt. Og det skulle der vel ikke være noget galt i (i hvert fald som jeg har forstået det). Er det ikke kun non.static vars og metoder som man ikke må referere til ?
Avatar billede erikjacobsen Ekspert
20. september 2005 - 15:34 #4
Jo, det er også korrekt. Er du sikker på det er linien?
Avatar billede onkel_satan Nybegynder
20. september 2005 - 15:37 #5
Det er hvad compileren brokker sig over.
Jeg kan lige prøve at poste hele klassen. Kunne være der var noget galt der men tror det godt ikke.

public class Server{
   
    public static void main(String[] args) {
        int threadCount = 0;       
        try{
            ServerSocket welcomstSocket = new ServerSocket(2222);
            System.out.println("Server socket initialized");
            while(true){
                Socket connection = welcomstSocket.accept();
                Runnable runner = new Worker(connection);
                Thread newThread = new Thread(runner);
                newThread.start();
            }
        }catch(Exception err){
        }
    }
   
    class Worker implements Runnable{
        private String outputMsg, inputMsg;
        private Socket connection;
       
        public Worker(Socket connection){
            this.connection = connection;
        }
       
        public void run(){
            try{
                BufferedReader inputBuffer = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                DataOutputStream outputBuffer = new DataOutputStream(connection.getOutputStream());
                inputMsg = inputBuffer.readLine();
                outputMsg = inputMsg.toUpperCase() + '\n';
                outputBuffer.writeBytes(outputMsg);   
            }catch(Exception err){
            }
        }
    }
}
Avatar billede erikjacobsen Ekspert
20. september 2005 - 15:45 #6
Det vil da umiddelbart hjælpe at anbringe class Worker udenfor class Server
Avatar billede onkel_satan Nybegynder
20. september 2005 - 15:50 #7
Ja, det ser ud til at virke. Har du en lille forklaring på hvorfor den ikke må implementeres som en subklasse ?
Avatar billede erikjacobsen Ekspert
20. september 2005 - 15:52 #8
Det er ikke en subklasse. Det er en indlejret klasse, og der gælder "sjove" regler. Vent med det til en anden gang.
Avatar billede onkel_satan Nybegynder
20. september 2005 - 16:03 #9
Hehe... æv
Men tak for hjælpen. Det spiller som det skal nu. Smid et svar for point.
Avatar billede erikjacobsen Ekspert
20. september 2005 - 16:05 #10
Nej tak. Svar selv, accepter eget svar.
Avatar billede onkel_satan Nybegynder
20. september 2005 - 16:11 #11
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester