[java] twee lijsten filteren

Pagina: 1
Acties:

  • Thyzz
  • Registratie: September 2001
  • Laatst online: 18-08 11:30

Thyzz

-=leeg=-

Topicstarter
IK ben op het moment een anonymous ftp server aan het bouwen. en ik wil kunnen bij houden wat welke IP aan het doen is terwijl hij ingelogd is.

Nu wil ik 2 lijsten hebben een met alle ingelogde ipadressen en een met alle acties van die ipadressen.
Echter als ik een ipadres selecteer moet alleen de actie van dat ene ipadress getoond worden

Op het moment het ik 2 lijsten(jListModel). Eentje waar ik de ipadressen bijhoud, en eentje waar ik de acties van die ip-adressen bijhoud
Afbeeldingslocatie: http://www.tweakers.net/ext/f/1547/thumb.jpg
voorbeeld van hoe het er nu uitziet


-
Java:
1
2
3
4
public void connectionOpened(Connection connection)
  { // connection bevat het ipadress van de client
    ftpListModel1.addConnection(connection);
  }


&&

Java:
1
2
3
4
5
6
7
8
9
10
public void commandExecuted(Connection connection, Command command)
{
   switch(command.getCommandNo()) {
      case Command.CMD_CDUP:
          ftpListModel21.addCommandExecuted
              (connection.getControlSocket().getInetAddress()
              +": in directory : "+ connection.getWorkDirectory());
     break;
......
}


zoals je ziet zet ik in de tweede lijst ook de IP adressen omdat ik op dit moment alle acties onderelkaar ze zien krijg.

Dacht eerst gewoon 2 lijsten en dan de 2de lijst elke keer filteren, al je een de acties van een bepaald ip adres wil zien. maar dat is vrij omslachtig en als er dan veel mensen ingelogd zijn (betekend veel acties) duurt het lang voor hij alles gefilterd heeft.
Een klasgenoot zei dat ik een hashmap moest gebruiken, echter daar kunnen naar mijn mening alleen unieke waarden in.
En het komt regelmatig voor dat een gebruiker een actie meerdere keren uitvoert.

En je zit met het probleem dat de acties ook in de goede volligorde moeten staan.
heeft iemand een betere oplossing voor dit probleem?

5325wp


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Misschien moet je dit eens proberen te zien door je in te denken dat een connection op een IP, één sessie is.
Maw stel je maakt een 'sessie' object welke vanuit jouw model, slecht twee dingen ( qua model ) bevat, namelijk een connectie naar de client en een lijst met acties.

Kijk dan eens naar dit stukje code:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class Session {

        private Connection      _connection;
        private List            _actions;
        
        public Session( Connection connection ) {
        
                setConnection( connection );
                setActions( new ArrayList( ) );
                
        }
        
        private void setActions( List actions ) {
                
                if( actions == null )
                        throw new NullPointerException( "The acctionsList cannot be null" );
                        
                _actions = actions;
        }
        
        private void setConnection( Connection connection ) {
                
                if( connection == null )
                        throw new NullPointerException( "The connection cannot be null" );
                        
                _connection = connection;
        }
        
        public Connection getConnection( ) {
                        
                return _connection;
        }
        
        public List getActions( ) {
                
                return _actions;
        }
}


Dit kun je dan uitbreiden met methodes als:
Java:
1
2
3
4
5
6
7
        public void addAction( FTPAction action ) {
                
                if( action == null )
                        throw new NullPointerException( "The action cannot be null" );
         
                getActions().add( action );               
        }


Hiermee zou je dus van het object wat in je eerste view van de IP's gekozen wordt, simpelweg de methode getActions( ) aanroepen, om een List met actions te krijgen, van uitsluitend die client.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
private final TheListClass IPList ...
private final TheListClass ActionList ....
// hier allemaal hippe code tussen

// En de actionPerformed method in je actionListener geregistreerd op je IPList
// Dit is allemaal pseudo, omdat ik je classkeuze voor de lists niet ken.
//
public void actionPerformed( ActionEvent e ) {
        
        ActionList.clear();
        Session chosenSession = IPList.getSelectedItem();
        ActionList.add( chosenSession.getActions() );
}   


Stel je zou van alle Clients de actions willen hebben dan loop je gewoon alle ip's van de lijst langs en roep je daar alle getActions() van aan.

Code is net even snel bedacht en ongecompileerd. Kan fouten bevatten enzo...

  • reskobon
  • Registratie: November 2001
  • Laatst online: 14-08 22:26
wat Glimi aan het einde zegt zou ik ook doen! Gewoon alle messages langslopen en filteren.

Ik zie in je screenshot een ip adres staan waar de flapdoos op draait en dat zit in de range van Hogeschool Brabant. Ik zit ook op AIM in Breda 2e jaar in de T richting :)

Leeg


  • Thyzz
  • Registratie: September 2001
  • Laatst online: 18-08 11:30

Thyzz

-=leeg=-

Topicstarter
Glimi schreef op 31 januari 2003 @ 21:37:
Misschien moet je dit eens proberen te zien door je in te denken dat een connection op een IP, één sessie is.
Maw stel je maakt een 'sessie' object welke vanuit jouw model, slecht twee dingen ( qua model ) bevat, namelijk een connectie naar de client en een lijst met acties.

Kijk dan eens naar dit stukje code:
[..]
Ik doe dus nu het volgende

Java:
1
2
3
4
5
6
7
8
9
10
11
public void connectionOpened(Connection connection)
  {
        session = new Session(connection);
  }

public void commandExecuted(Connection connection, Command command)
   {
[..]
        System.out.println(session.getConnection().getControlSocket().getInetAddress());
[..]
    }

ik kijk dus alleen even wie een commandheeft uitgevoerd (als ik je code goed heb begrepen)
Maar ik krijg een nullpointerException
code:
1
2
3
4
5
6
7
java.lang.NullPointerException

    at FTPguiFrame.commandExecuted(FTPguiFrame.java:232)

    at ftp.Server.fireCommandExecuted(Server.java:139)

    at ftp.Connection.run(Connection.java:128)

* Thyzz : "Whelp"

[ Voor 3% gewijzigd door Thyzz op 02-02-2003 20:34 ]

5325wp


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
code:
1
at FTPguiFrame.commandExecuted(FTPguiFrame.java:232)

Prachtige melding toch? :*) Hoe moeilijk kan het dan nog zijn? :+

Het oplossen van NullPointerExceptions is echt een vaardigheid die je zelf zou moeten (leren) beheersen.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Thyzz
  • Registratie: September 2001
  • Laatst online: 18-08 11:30

Thyzz

-=leeg=-

Topicstarter
thanks voor het antwoord.

Daar was ik ook al achter.
En het zit hem in het stukje van de session.getConnection
en als je Jbuilder mag geloven dan moet ik daar netjes een connection voor terug krijgen.
Zeker ook omdat session = new Session(connection) geen foutmeldingen oplevert.

dat betekend dat er een Session is aangemaakt. echter als ik dan die session opvraag dan krijg ik dus die nullpointerexception. Wat zo veel wil zeggen dat er dus geen session is(of geen connection).

Ik kan er alleen niet achter komen waar die "null" vandaan komt.
zeker ook omdat volgens mij die connection gewoon aan session wordt meegegeven

5325wp


  • reskobon
  • Registratie: November 2001
  • Laatst online: 14-08 22:26
Ik weet het :)

je maakt je Session aan bovenaan in je klasse gok ik

Session session;

En in de methode connectionClosed geef je hem een waarde.
Die waarde is dan alleen bekend binnen connectionClosed.
In commandExecuted is die waarde niet bekend en is session dus "null" en vandaar je exceptie :)

Leeg


  • Thyzz
  • Registratie: September 2001
  • Laatst online: 18-08 11:30

Thyzz

-=leeg=-

Topicstarter
dat kan niet
want session is een apparte klassen, want als wat jij zegt waar is dan zou ik geen info kunnen mee geven aan een klassen en die info dan door een andere klasse weer kunnen ophalen.

toch?!

5325wp


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 24-08 20:22

Robtimus

me Robtimus no like you

Dit is dus de regel waar het probleem in zit heb ik begrepen:
code:
1
System.out.println(session.getConnection().getControlSocket().getInetAddress());

Er zijn dus een aantal objecten die null kunnen zijn:
- session; niet waarschijnlijk omdat die geinitialiseerd is
- session.getConnection(); maw de connection die je gebruikt om de session te maken is null
- session.getConnection().getControlSocket(); er is dus iets fout gegaan met het aanmaken van de connection

Probeer dmv tijdelijke variabelen eerst te achterhalen welke precies de fout is:
code:
1
2
3
4
Connection connecion = session.getConnection();
ControlSocket sock = connection.getControlSocket();
InetAddress addr = sock.getInetAddress();
System.out.println(addr);

zo zie je precies welk deel de exceptie gooit.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Thyzz
  • Registratie: September 2001
  • Laatst online: 18-08 11:30

Thyzz

-=leeg=-

Topicstarter
er gaat al iets fout in session.getConnection

en dat verbaast me eigenlijk, want die connection wordt wel opgeslagen.

en connection bevat onderandere die controleSocket en InetAdress.

5325wp


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 24-08 20:22

Robtimus

me Robtimus no like you

Crash_neo schreef op 02 February 2003 @ 17:49:
er gaat al iets fout in session.getConnection
dan is session dus het object dat null is

weet je echt 100% zeker dat commandExecuted niet kan worden aangeroepen voor connectionClosed? Of dat je in de tussentijd niet per ongeluk session op null zet op wat voor manier dan ook?

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Thyzz
  • Registratie: September 2001
  • Laatst online: 18-08 11:30

Thyzz

-=leeg=-

Topicstarter
Laat maar zitten

er stonden ergens een of anders tom haakje verkeerd.
waardoor session niet goed geinitialiseerd werd.
vaag maar waar

in iedergeval bedankt.

5325wp

Pagina: 1