[JAVA] Waarom wordt de variabele leeggehaald?

Pagina: 1
Acties:

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 15-09 23:09
Ik snap er niks van... In de try-catch wordt de inhoud van een bestand gezet in variabele 'line'.
Deze variabele stuur ik naar de methode setLine waar hij de variabele in 'theOutput' pleurt.
de variabele 'line' wordt sowieso gewist op een of andere manier, ook als ik hem helemaal aan het begin van de klasse initializeer!
Hoe kan dit?
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
59
60
import java.awt.*;
import java.applet.Applet;
import cz.dhl.io.*;
import cz.dhl.ftp.*;
import java.io.*;

public class FtpStreamTest extends Applet
{     
    
    String theOutput;
        public void init()
        {
        FtpStreamTest streamtest=new FtpStreamTest();
        streamtest.Connect();
    }
    
    public void setLine(String regel)
    {
    theOutput=regel;
    }
    

        public void Connect()   
        {
        FtpConnect cn = FtpConnect.newConnect
        ("ftp://129.125.104.157/mysongs");
        cn.setUserName("public");
        cn.setPassWord("1234");
        Ftp cl = new Ftp();
        FtpInputStream is = null;
        String line;    

             try 
            {  
        cl.connect(cn);
        FtpFile file = new FtpFile("test2",cl);
        is = new FtpInputStream(file);
        BufferedReader br = new BufferedReader (new InputStreamReader(is));
          [b]while ((line = br.readLine()) != null) setLine(line);[/b]//hier staat wel de tekst in line
          br.close();
            } catch (IOException e) {System.out.println(e);}
    
                finally 
            { 
         if(is!=null)
            try {is.close();}
            catch (IOException e) {}     
          cl.disconnect(); 
        }
    }
    
    
    public void paint(Graphics g)
    {
    System.out.println(theOutput); //[b]Waarom is theOutput hier null????[/b]
    //g.drawString(theOutput,50,50);
    }

    
}

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

probeer dit eens.. een stuk beter te lezen.
code:
1
2
3
4
5
6
line = br.readLine();
while(line!=null)
{
   setLine(line);
   line = br.readLine();
}

En waarom doe je niets met de string van een vorige itteratie? dat kan vast niet de bedoeling zijn.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

En vind je Verbeek ook zo`n zeiker? :) Hanze Hoogeschool gogogo :)

ik zie zo 1 2 3 geen fout in je code, maar volgens mij zit het probleem in die while lus (die er wel oke uitziet).

  • Onno
  • Registratie: Juni 1999
  • Niet online
Op dinsdag 04 december 2001 00:18 schreef Mastermind het volgende:
de variabele 'line' wordt sowieso gewist op een of andere manier, ook als ik hem helemaal aan het begin van de klasse initializeer!
Hoe kan dit?
code:
1
2
3
4
5
6
7
8
9
10
11
public void init()
{
  FtpStreamTest streamtest=new FtpStreamTest();
  streamtest.Connect();
}
    
public void paint(Graphics g)
{
  System.out.println(theOutput); // Waarom is theOutput hier null????
  //g.drawString(theOutput,50,50);
}
Je maakt een nieuw object dat je laat connecten, en bent daarna verbaasd dat in je eerste object theOutput geen waarde heeft? :Y)

  • Rhythmic
  • Registratie: Februari 2000
  • Laatst online: 07-10-2025
Het probleem is dat je in de init() een lokaal FtpStreamTest object maakt, en in de nieuwe object de methode Connect aanroept. Die Connect zal de theOutput string in dat nieuwe object goedzetten. Als Connect klaar is heb je dus een 2e FtpStreamTest object in je init() methode met een geinitialiseerde theOutput. Dat object wordt door de garbage collector opgeruimt op het moment dat je init() verlaat. Vervolgens probeer je in paint() je eigen theOutput variabele uit te printen, die dus nog nooit geinitialiseerd is.

Oplossing: de code in init() moet zijn:
code:
1
2
3
public void init() {
    Connect();
}

edit: Onno had het net ff eerder door :)

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 15-09 23:09
Die theOutput staat helemaal in het begin... Die wordt nergens anders geinitialiseerd, wat overigens ook niet kan want elke methode erft die variabele. Wat Onne zegt doet er niet toe, de variabele staat nog voor de constructor.

Ik heb de fout al gevonden trouwens, wat ik hierboven gepost had was helemaal goed, maar ik wist niet dat de methode paint() standaard als eerste aangeroepen wordt, en jah, dan staat er nog niks in theOutput... :z

'k Heb de methode paint gerenamed en nu doet ie het wel goed! lekker ftp-en met java... :+

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

hmmm.. ik ben het met Onno en Rhythmic eens. Je maakt inderdaad zelf nog een object aan die je laat connecten en die meteen weer weggegooid word. Ik zag het zelf eerst ook niet, maar ze hebben volgens mij wel gelijk.

De techniek die jij gebruikt om een 'hoofd' object te initialiseren gebruik je bij applications, maar bij applets werkt het inderdaad anders.

  • LightYears
  • Registratie: September 2000
  • Laatst online: 14-03-2024

LightYears

wilt geen iPod

euhm ... wat is precies het doel van deze applet ?
downloaden ? mag niet, het is een applet
uploaden ? mag niet het is een applet
bekijken ? mag wel :)

kikke man een eigen 'ik kan me ftp zien' programma

EAC > Ogg vorbis -q6 > Cowon S9 > Westone ES3X > Oor


  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 15-09 23:09
Op dinsdag 04 december 2001 12:02 schreef LightYears het volgende:
euhm ... wat is precies het doel van deze applet ?
downloaden ? mag niet, het is een applet
uploaden ? mag niet het is een applet
bekijken ? mag wel :)

kikke man een eigen 'ik kan me ftp zien' programma
Zeg, zeg ff niks als je er geen verstand van hebt :z
Tuurlijk mag je wel een FTP-connectie in een applet maken, en het bestand ophalen/wegschrijven, alleen geen lees/schrijfacties direct naar de hdd.

Verwijderd

flame

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op dinsdag 04 december 2001 12:22 schreef Mastermind het volgende:

[..]

Zeg, zeg ff niks als je er geen verstand van hebt :z
Tuurlijk mag je wel een FTP-connectie in een applet maken, en het bestand ophalen/wegschrijven, alleen geen lees/schrijfacties direct naar de hdd.
Volgens mij mag je met een applet ook geen contact maken met een andere server dan waar de applet vandaan komt. Het is dus niet alleen beperkt tot geen lokale schijf toegang.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

[foutje]

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 15-09 23:09
Op dinsdag 04 december 2001 12:26 schreef Alarmnummer het volgende:

[..]

Volgens mij mag je met een applet ook geen contact maken met een andere server dan waar de applet vandaan komt. Het is dus niet alleen beperkt tot geen lokale schijf toegang.
Ok, dan heb je nu weer wat geleerd! :)
Deze applet bijvoorbeeld staat op Geocities en die maakt ook een connectie met met een andere FTP server, en je kunt ook gewoon een OutputStream en InputStream naar de file doen. :)
Pagina: 1