Toon posts:

[Java] Applet repainten

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik heb een programma geschreven voor mijn scouts en online gezet als applet, om makkelijk de inhoud van vergaderingen te veranderen. Eerst moet er ingelogd worden op het paswoordpaneel, waarna een bepaalde tekstfile wordt ingelezen en gezet wordt op het inhoudpaneel, die in de plaats van het paswoordpaneel komt.

Wat er dus fout loopt is dat het inhoudspaneel niet in de plaats van het paswoordpaneel komt. Beide worden op een hoofdpaneel gezet, die dan gerevalidate wordt. Als ik het run met eclipse, dan zie ik pas het inhoudspaneel als ik het scherm vergroot of iets dergelijke. Op een browser gebeurt er niets als er ingelogd wordt. Werk ik met JFrame ipv Applet werkt het ook perfect....

Ik kom er echt niet aan uit, dus alle hulp is welkom...

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
        public void init(){
        hoofdPaneel = new JPanel();
        add(hoofdPaneel);
        fillPaswoordPaneel();
    }

    public void fillPaswoordPaneel(){
        paswoordPaneel = new JPanel();
        paswoordPaneel.setLayout(new GridBagLayout());
                ....
        hoofdPaneel.add(paswoordPaneel);
        setSize(new Dimension(600,600));
        }

        //Nadat paswoord en username correct ingegeven worden, wordt fillInhoutPaneel opgeroepen:
        public void fillInhoudPaneel(){
        JPanel inhoudPaneel = new JPanel();
        inhoudPaneel.setLayout(new GridBagLayout());
                ....
                ....
        hoofdPaneel.remove(paswoordPaneel);
        hoofdPaneel.add(inhoudPaneel);
        hoofdPaneel.revalidate();
    }


Applet: http://www.dezwaluw.org/3/extra/vergaderingen.html (username: test en paswoord: test)
Volledige code: http://www.dezwaluw.org/3/extra/vergaderingen.java


Enige ideeën?
Alvast bedankt! _/-\o_

Acties:
  • 0 Henk 'm!

  • Sspruijt
  • Registratie: Mei 2007
  • Laatst online: 26-09 15:11
Je kan proberen om dit:

Java:
1
 hoofdPaneel.revalidate(); 


te vervangen door:

Java:
1
 hoofdPaneel.repaint(); 

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heb ik al geprobeerd, het doet nu iets meer (het paswoordpaneel wordt grijs), maar het werkt nog altijd niet. Als ik de applet online bekijk gebeurt er weer niets.

Acties:
  • 0 Henk 'm!

Verwijderd

Miksschien helpt 't als je voor die revalidate() een paswoordPaneel.sendToBack() doet of zo?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
JPanel heeft zo een functie niet, ik heb nu eens setVisible op false gezet maar dit doet ook niets.

Aangezien revalidate wel werkt met JFrame lijkt het iets te maken hebben met Applet. Google gaf me echter geen antwoorden...

Acties:
  • 0 Henk 'm!

  • OxiMoron
  • Registratie: November 2001
  • Laatst online: 08-07 14:27
code:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Java Plug-in 1.6.0_05
Using JRE version 1.6.0_05 Java HotSpot(TM) Client VM
User home directory = C:\Documents and Settings\Harro van der Klauw


----------------------------------------------------
c:   clear console window
f:   finalize objects on finalization queue
g:   garbage collect
h:   display this help message
l:   dump classloader list
m:   print memory usage
o:   trigger logging
p:   reload proxy configuration
q:   hide console
r:   reload policy configuration
s:   dump system and deployment properties
t:   dump thread list
v:   dump thread stack
x:   clear classloader cache
0-5: set trace level to <n>
----------------------------------------------------

Applet starting.
hier3
Exception in thread "AWT-EventQueue-2" java.security.AccessControlException: access denied (java.io.FilePermission ..\test.txt read)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkRead(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileReader.<init>(Unknown Source)
    at Vergaderingen.readInput(Vergaderingen.java:307)
    at Vergaderingen.actionPerformed(Vergaderingen.java:164)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)


In m'n java console..

Java applets hebben niet zomaar rechten tot verschillende files. Hij crasht nu waarschijnlijk op het inlezen van het tekst bestand nog voordat de panels geswitched worden.

Albert Einstein: A question that sometime drives me hazy: Am I or are the others crazy?


Acties:
  • 0 Henk 'm!

  • OxiMoron
  • Registratie: November 2001
  • Laatst online: 08-07 14:27
Je weet hoop ik ook dat een applet client side uitgevoerd wordt, en dus nooit zal kunnen schrijven naar een bestand op de server.

Albert Einstein: A question that sometime drives me hazy: Am I or are the others crazy?


Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 06:51

krvabo

MATERIALISE!

OxiMoron schreef op woensdag 26 november 2008 @ 22:25:
code:
1
..


In m'n java console..

Java applets hebben niet zomaar rechten tot verschillende files. Hij crasht nu waarschijnlijk op het inlezen van het tekst bestand nog voordat de panels geswitched worden.
Netbeans doet het hier anders prima?
run:
Applet starting.
hier3
file not found: C:\Documents ..\NetBeansProjects\Vergaderingen\..\test.txt
Applet stopping.
Destroy method called.


Maar zoals de persoon hierboven zegt: Dit gaat zo niet werken. Je kan het wel met jsp gaan doen.

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

  • morpheus
  • Registratie: November 1999
  • Laatst online: 17-09 19:39
OxiMoron schreef op woensdag 26 november 2008 @ 22:29:
Je weet hoop ik ook dat een applet client side uitgevoerd wordt, en dus nooit zal kunnen schrijven naar een bestand op de server.
Hoezo niet? Je kan als source toch gewoon een internetlocatie opgeven waar het bestand staat? Wegschrijven mag ook geen probleem zijn.

3kwp pvoutput


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb er een JApplet van gemaakt en nu doe ik op het einde van fillInhoudPaneel dit:

Java:
1
2
3
4
hoofdPaneel.remove(0);
hoofdPaneel.add(inhoudPaneel);
hoofdPaneel.repaint();
hoofdPaneel.revalidate();

en met eclipse werkt het. Op een browser werkt het echter nog altijd niet....

Hopelijk lukt het om het op te slaan, want anders is alles ene beetje nutteloos geweest :p Alhoewel ik misschien wel nog iets weet. Anyway, dat is dan voor later.

Ik heb alles op de site upgedate:
http://www.dezwaluw.org/3/extra/vergaderingen.html
http://www.dezwaluw.org/3/extra/vergaderingen.java
De test.txt staat hier: http://www.dezwaluw.org/3/extra/test.txt

[ Voor 3% gewijzigd door Verwijderd op 26-11-2008 23:03 ]


  • OxiMoron
  • Registratie: November 2001
  • Laatst online: 08-07 14:27
Laat me dan even duidelijk zijn...

Dat een applet lokaal op je eigen computer goed werkt is nogal logisch.. dat wordt de applet op dezelfde machine gerunt als waar het bestand staat.

Op internet heb je de Server (met die test.txt) en de Client (diegene die de applet aanroept)

Nu zijn er dus meerdere beveiligingen die in werking treden die er anders niet zijn:

1. De applet (client) mag via een tcp ip socket enkel verbinden met de server waar hij van gedownload is.
2. De applet heeft lees rechten op websites, geen schrijfrechten (anders kun je dus gewoon tweakers.net gaan overschrijven :S)
3. De applet heeft geen toegang tot bestanden op de client z'n computer (anders zou je een applet kunnen schrijven die iemands hardeschijf scant en deze gegevens verstuurt naar de website waar hij vandaan kwam).

3 kun je voor elkaar krijgen door je applet de signen, de gebruiker accepteerd dan dat je toegang hebt tot zijn/haar bestands systeem.


Zit nu op m'n werk en krijg als ik de appet op de site open nog steeds die AccessDenied exception.
Voornamelijk omdat je een gewone file read operatie doet over het internet, wat natuurlijk niet gaat werken.
De applet wordt gedownload naar je lokale PC en komt in de tijdelijke internet bestanden map. Vervolgens probeer jij in die map het bestandje test.txt in te lezen; wat natuurlijk niet werkt.

Albert Einstein: A question that sometime drives me hazy: Am I or are the others crazy?


  • Joran
  • Registratie: December 2005
  • Laatst online: 22:02

Joran

<3 natalee

even gegoogled en zag toen dit staan:

aan het begin van de fillmethode:
Java:
1
hoofdPaneel.show();


aan het einde (force repaint)

Java:
1
2
3
4
hoofdPaneel.paintImmediately(0,0,
hoofdPaneel.getWidth(),
hoofdPaneel.getHeight());
} 

Send me your gameboys


  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:36

Haan

dotnetter

Leuk en aardig, maar wat de TS wil bereiken met z'n applet gaat dus sowieso nooit werken ;)

Kater? Eerst water, de rest komt later


Verwijderd

Topicstarter
Hm ja ok daar heb ik niet verder over nagedacht, nuja dan doe ik wel een ftp verbinding en lees en schrijf de files op die manier.

Als ik op mijn computer met firefox die vergaderingen.html open werkt het echter ook niet.

Net gemerkt trouwens dat firefox de applet in zn cache opneemt ofzo, ik had iets veranderd aan de class file, maar firefox opende de applet nog met de oude class file....Enig idee hoe ik dit kan verhelpen?

@jorann: wnnr doe ik die force repaint dan? In de plaats van de repaint() en revalidate()? Want het doet hier voorlopig nog niets....

  • OxiMoron
  • Registratie: November 2001
  • Laatst online: 08-07 14:27
Ja, firefox caches applets.. maar volgens mij alleen voor de sessie, dus firefox opnieuw opstarten zou moeten werken.


Houd er ook rekenening mee dat hoewel ftp best werkt, een applet niet echt veilig is. Je kunt hem vrij gemakkelijk decompileren en dan zou je dus zo de inlog gegevens van de ftp kunnen lezen.

Albert Einstein: A question that sometime drives me hazy: Am I or are the others crazy?


Verwijderd

Topicstarter
Aha ok...een jar kan je op dezelfde manier gemakkelijk decompileren zeker?

Ik haal nu de file over internet en het werkt. Met SimpleFTP wil het echter nog niet lukken om de connectie te maken, alhoewel ik geen probleem heb om met mn telenet account een verbinding te maken.
code:
1
2
3
4
5
6
7
8
9
10
public void readInput() throws IOException{
                URL url = new URL("http://www.dezwaluw.org/3/extra/"+takNaam+".txt");
                BufferedReader input = new BufferedReader (new InputStreamReader ((url.openStream())));
                ....
}
public void saveOutput() throws IOException{
                SimpleFTP ftp = new SimpleFTP();
        ftp.connect("ftp://ftp.dezwaluw.org", 21, "***", "***"); //hier gaat het fout, de username en paswoord kloppen zeker en vast
                ....
}

Anyway, het repainten/revalidaten lukt allesinds dus dat is al mooi :)

Suggesties omtrend iets veiliger dan zo een ftp?

[ Voor 11% gewijzigd door Verwijderd op 27-11-2008 13:26 ]


  • OxiMoron
  • Registratie: November 2001
  • Laatst online: 08-07 14:27
Mja, een jar file is gewoon packaging en compressie, je kunt hem met WinRar ofzo makkelijk openen.

Qua beveiliging heb je weinig opties helaas; de best method is nog door eerst met bijvoorbeeld PHP in te loggen en daar de session id van meegeven aan je applet. Dan kunje die gebruiken om bijvoorbeeld posts aan te roepen op je site met die session id. Dit is nog steeds niet echt veilig maar er zit tenminste een timeout op je sessie :)

Albert Einstein: A question that sometime drives me hazy: Am I or are the others crazy?


  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 19:33

Sebazzz

3dp

OxiMoron schreef op donderdag 27 november 2008 @ 12:56:
Ja, firefox caches applets.. maar volgens mij alleen voor de sessie, dus firefox opnieuw opstarten zou moeten werken.
Of control+F5 of met de WebDeveloper toolbar cache verwijderen, etc...

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 27-09 08:54

Nick_S

++?????++ Out of Cheese Error

OxiMoron schreef op donderdag 27 november 2008 @ 14:01:
Mja, een jar file is gewoon packaging en compressie, je kunt hem met WinRar ofzo makkelijk openen.

Qua beveiliging heb je weinig opties helaas; de best method is nog door eerst met bijvoorbeeld PHP in te loggen en daar de session id van meegeven aan je applet. Dan kunje die gebruiken om bijvoorbeeld posts aan te roepen op je site met die session id. Dit is nog steeds niet echt veilig maar er zit tenminste een timeout op je sessie :)
Je zou ook de login gegevens die je in je applet gebruikt (gebruiker voert username en pass in) kunnen gebruiken om naar je FTP te connecten. (Dwz. dat elke gebruiker van je applet ook een gebruiker op je FTP moet zijn) Dat is redelijk secure.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Verwijderd

Topicstarter
Het revalidate probleem is dus opgelost, maar ik heb nog een zijvraag en ik ga er nu even geen nieuwe topic voor openen:
Ik heb nog problemen met mijn FTP. Ik doe het met SimpleFTP: http://www.jibble.org/simpleftp/
Zoals ik al heb gezegd lukt deze met mijn telenet account, maar als ik het op die andere FTP wil doen krijg ik een IOException dat wordt teweeggebracht door een 220 response, hetgeen volgens een site (http://www.altools.com/im...odes_rfc_959_messages.htm) betekent "Service ready for new user."
Maar dit betekent toch gewoon dat de server klaar is voor mijn aanvraag?

@Nick_S: lijkt mij inderdaad redelijk secure, maar het is niet bij mij het geval dat de gebruikers die de applet gebruiken (sowieso beperkt tot 5 mensen) het paswoord van de ftp weten. Ik zie het ook niet zitten ze dit paswoord te geven, alhoewel het nog geen slecht idee is. Zal er nog eens over nadenken :)

Alvast bedankt voor de vele antwoorden :)

[ Voor 5% gewijzigd door Verwijderd op 27-11-2008 14:48 ]


  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 27-09 08:54

Nick_S

++?????++ Out of Cheese Error

Verwijderd schreef op donderdag 27 november 2008 @ 14:41:
Ik heb nog problemen met mijn FTP. Ik doe het met SimpleFTP: http://www.jibble.org/simpleftp/
Zoals ik al heb gezegd lukt deze met mijn telenet account, maar als ik het op die andere FTP wil doen krijg ik een IOException dat wordt teweeggebracht door een 220 response, hetgeen volgens een site (http://www.altools.com/im...odes_rfc_959_messages.htm) betekent "Service ready for new user."
Maar dit betekent toch gewoon dat de server klaar is voor mijn aanvraag?
Ik weet niet op wat voor soort server je draait, maar het lijkt erop, alsof dit de ftp server is van bijvoorbeeld je ISP. Vaak mag je hier met FTP alleen connecten vanaf je eigen verbinding (afgedwongen door je ip adres te valideren tegen de subnetten die je ISP hebt). Je zal dus geen verbinding kunnen maken vanuit een willekeurige pc. Probeer maar eens te verbinden met ftp vanaf de lokatie waar het met je applet niet lukt. Dat zal je waarschijnlijk met ftp ook niet lukken. ;)

Je zal echt moeten gaan kijken naar een server side applicatie, dit kan een PHP script zijn, een webservice, een REST service, een servlet, anything, zolang het maar server side draait en niet client side, zoals je applet.

[ Voor 0% gewijzigd door Nick_S op 27-11-2008 16:15 . Reden: Zie onder, ander domein. ]

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


  • BHR
  • Registratie: Februari 2002
  • Laatst online: 27-09 22:12

BHR

Ftp-en werkt niet omdat het domein van waar het applet vandaan komt (www.dezwaluw.org) anders is dan het domein van de ftp-server (ftp.dezwaluw.org). Zoals al eerder aangehaald, een applet kan alleen een netwerkverbinding leggen naar de server/domein waar het vandaan komt.

No amount of key presses will shut off the Random Bug Generator


  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Verwijderd schreef op donderdag 27 november 2008 @ 13:23:
Aha ok...een jar kan je op dezelfde manier gemakkelijk decompileren zeker?

Ik haal nu de file over internet en het werkt. Met SimpleFTP wil het echter nog niet lukken om de connectie te maken, alhoewel ik geen probleem heb om met mn telenet account een verbinding te maken.
code:
1
2
3
4
5
6
7
8
9
10
public void readInput() throws IOException{
                URL url = new URL("http://www.dezwaluw.org/3/extra/"+takNaam+".txt");
                BufferedReader input = new BufferedReader (new InputStreamReader ((url.openStream())));
                ....
}
public void saveOutput() throws IOException{
                SimpleFTP ftp = new SimpleFTP();
        ftp.connect("ftp://ftp.dezwaluw.org", 21, "***", "***"); //hier gaat het fout, de username en paswoord kloppen zeker en vast
                ....
}

Anyway, het repainten/revalidaten lukt allesinds dus dat is al mooi :)

Suggesties omtrend iets veiliger dan zo een ftp?
AFAIK mag een applet alleen TCP/IP verbindingen naar z'n eigen host opzetten.
BHR schreef op donderdag 27 november 2008 @ 15:20:
Ftp-en werkt niet omdat het domein van waar het applet vandaan komt (www.dezwaluw.org) anders is dan het domein van de ftp-server (ftp.dezwaluw.org). Zoals al eerder aangehaald, een applet kan alleen een netwerkverbinding leggen naar de server/domein waar het vandaan komt.
Doh, spuit 11.

[ Voor 15% gewijzigd door Hydra op 27-11-2008 15:37 ]

https://niels.nu

Pagina: 1