Avatar billede anders8271 Nybegynder
10. april 2006 - 02:46 Der er 15 kommentarer

Imports i java?

Hejsa..
Jeg har en fil jeg vil have inkluderet i min applet.
Men hvordan gøres dette?

filerne ligger i den samme mappe som appleten..

Har prøvet med:
import ThreadedEchoServer.*;
og
import ThreadedEchoServer;

Men ved .*; bagved siger den der ingen package er..

Hvad skal jeg gøre?
Avatar billede arne_v Ekspert
10. april 2006 - 02:51 #1
ingenting

klasser i samme package (også når de begge er i default package)
behøver ikke at blive importeret
Avatar billede anders8271 Nybegynder
10. april 2006 - 02:52 #2
Så må jeg høre arne.. Hvor kan jeg læse om packages.. gerne på dansk..

Fordi .. jeg vil inkludere min echoserver i min applet, således jeg kan kalde kommandoer frem og tilbage..

Kan du eventuelt foreklage hurtigt hvad package er?
Avatar billede arne_v Ekspert
10. april 2006 - 02:56 #3
java package svarer til C# og C++ namespaces

package a.b.c;

public class D {
}

er en klasse med det korte navn D og det fulde navn a.b.c.D

når noget andet kode skal bruge den klasse kan man skrive

a.b.c.D o = new a.b.c.D();

eller man kan bruge:

import a.b.c.*;

og

D o = new D();
Avatar billede anders8271 Nybegynder
10. april 2006 - 02:59 #4
Aha....!
Altså nu er de i samme mappe, og har ikke noget "package ..." sat til!

Kan du så foreklare lidt om hvordan 2 filer skal hænges sammen? - Kan det ikke gøres uden metoden "package" ?

Forstod ikke helt det med packages!

Altså, jeg gik i stå med a.b.c - hvor kommer de bogstaver fra??

Hvis jeg nu har i min echoserver ->
var ny = new klasse.NewUser("..,..,");

Vil det se rigtigt ud, Arne?
Avatar billede arne_v Ekspert
10. april 2006 - 03:14 #5
default package er package med et tomt navn - som jeg startede med at sige
samme package => ikke noget behov for import

a.b.c er bare ent package navn jeg har valgt lidt uoriginalt

i virkelighedens verden hedder de:

java.util.regex

dk.eksperten.util

etc.
Avatar billede arne_v Ekspert
10. april 2006 - 03:15 #6
med hensyn til din applet og din server så tror jeg ikke at du er på rette spor
Avatar billede anders8271 Nybegynder
10. april 2006 - 03:24 #7
Har en klasse i min applet som ser således ud:

    public void newuser(int id, String brugernavn, int xpos, int ypos, String figur)
    {
           
            bufferGfx.drawString(brugernavn, xpos, ypos+70);
    }

Mit spørgsmål er så egenlig..
Hvad skal jeg gøre for at få min "threadedEchoServer" til at kommunikere med appleten?

Så er det jo imports og packages, ikke sandt Arne?
Avatar billede arne_v Ekspert
10. april 2006 - 04:03 #8
nej

det er netværks kommunikation
Avatar billede anders8271 Nybegynder
10. april 2006 - 04:07 #9
Okay.
Så er jeg jo på rette spor.
Ligenu virker det hvis andre ser appleten, så siger den i min "echoServer" :
blablabla:port konnektet til serveren.

Men så vil jeg have den til at kommunikere med appleten således, når en bruger åbner appleten skal alle andre på clienten kunne se at brugeren er kommet, også er det her at min public void newuser kommer ind i billedet.
Så spørgsmålet lyder:

Hvad skal jeg gøre for at få min "threadedEchoServer" til at kommunikere med appleten?
Avatar billede arne_v Ekspert
10. april 2006 - 05:40 #10
jeg poster lige et par stykker kode til inspiration
Avatar billede arne_v Ekspert
10. april 2006 - 05:40 #11
import java.io.*;
import java.net.*;
import java.util.*;

public class Server {
    public static void main(String[] args) {
        try {
            List lst = new ArrayList();
            ServerSocket ss = new ServerSocket(12345);
            while(true) {
                Socket s = ss.accept();
                ClientHandler cli = new ClientHandler(s, lst);
                cli.start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

class ClientHandler extends Thread {
    private Socket s;
    private BufferedReader br;
    private PrintWriter pw;
    private List lst;
    private String user;
    public ClientHandler(Socket s, List lst) {
        try {
            this.s = s;
            br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            pw = new PrintWriter(s.getOutputStream(), true);
            this.lst = lst;
            user = "not logged in";
            lst.add(this);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void run() {
        try {
            String line;
            while((line = br.readLine()) != null) {
                if(line.substring(0,6).equals("LOGIN ")) {
                    user = line.substring(6);
                    System.out.println(user + " login");
                } else if(line.substring(0,5).equals("SEND ")) {
                    String msg = line.substring(5);
                    for(int i = 0; i < lst.size(); i++) {
                        ClientHandler cli = (ClientHandler)lst.get(i);
                        if(cli != this) {
                            cli.send(msg);
                            System.out.println(msg + " send to " + cli.user);
                        }
                    }
                } else {
                    System.out.println("Unknown command : " + line);
                }
            }
        } catch (IOException e) {
            // nothing
        } finally {
            lst.remove(this);
        }
    }
    public void send(String msg) {
        pw.println(msg);
    }
}
Avatar billede arne_v Ekspert
10. april 2006 - 05:40 #12
import java.io.*;
import java.net.*;

public class Client {
    public static void main(String[] args) {
        try {
            Socket s = new Socket("localhost", 12345);
            PrintWriter netpw = new PrintWriter(s.getOutputStream(), true);
            BufferedReader netbr = new BufferedReader(new InputStreamReader(s.getInputStream()));
            PrintWriter conpw = new PrintWriter(System.out, true);
            BufferedReader conbr = new BufferedReader(new InputStreamReader(System.in));
            ServerHandler srv = new ServerHandler(conpw, netbr);
            srv.start();
            netpw.println("LOGIN " + args[0]);
            String line;
            System.out.print("Indtast text (afslut med CTRL/Z): ");
            while((line = conbr.readLine()) != null) {
                netpw.println("SEND " + line);
                System.out.print("Indtast text (afslut med CTRL/Z): ");
            }
            netbr.close();
            netpw.close();
            s.close();
            srv.interrupt();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

class ServerHandler extends Thread {
    private BufferedReader br;
    private PrintWriter pw;
    public ServerHandler(PrintWriter pw, BufferedReader br) {
        this.pw = pw;
        this.br = br;
    }
    public void run() {
        try {
            String line;
            while((line = br.readLine()) != null) {
                pw.println(line);
            }
        } catch (IOException e) {
            // nothing
        }
    }
}
Avatar billede anders8271 Nybegynder
10. april 2006 - 14:03 #13
Arne, det er ikke noget med det at gøre..
Har jo en fil som står og lytter på en port og venter på kommando som den acceptere.

Og i min applet har jeg også således den sender til port 9999.

Problemet er bare de skal importeres så de kan arbejde sammen..
Avatar billede arne_v Ekspert
10. april 2006 - 14:41 #14
nej

medmindre du serialiserer objekter (ObjectOutputStream og ObjectInputStream) saa
vil du med en socket loesning ikke skulle dele kode mellem client og server
Avatar billede anders8271 Nybegynder
10. april 2006 - 15:06 #15
Det skal jeg da , når jeg skal kalde en klasse ved output "newuser" ??
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