[java] static vs non-static methode probleempje

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Liqued
  • Registratie: Februari 2001
  • Laatst online: 06-08 15:21
Ik blijf het een lastig concept vinden. Static en non-static methodes. Ik loop tegen de volgende compile error aan en ik hoop dat jullie mij kunnen helpen met de oplossing.

code:
1
2
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - non-static method write(net.sf.json.JSON) cannot be referenced from a static context
        at twitterstreamreader.TwitterSearch.twitterKeywordSearch(TwitterSearch.java:10)


Dit is de 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
import net.sf.json.JSONObject;
import net.sf.json.xml.XMLSerializer;

/**
 *
 * @author liqued
 */
public class TwitterSearch {

    public void twitterKeywordSearch(String[] keywords) {
        
        if (keywords.length > 0) {

            for (int i = 0; i < keywords.length; i++) {
                String xml = new String();
                JSONObject json = JSONObject.fromObject(getTwitterKeywordRequest(keywords[i]));
                xml = XMLSerializer.write(json);
                System.out.println(xml);
            }
        } else {
            System.err.println("Error: No keywords");
        }
    }

    private String getTwitterKeywordRequest(String keyword) {
        URLRequest request = new URLRequest();
        return request.requestToString("http://search.twitter.com/search.json?q=" + keyword);
    }
}

Acties:
  • 0 Henk 'm!

Verwijderd

Je moet eerst een instance defineren van XMLSerializer. Daarna kan je pas de methode write() aanroepen.

edit:
Volgens mij niet van XMLSerializer maar van JSONObject zoals ook in de foutmelding staat.

[ Voor 32% gewijzigd door Verwijderd op 27-08-2010 15:36 ]


Acties:
  • 0 Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 21:05
Een static method is een method die op de class zelf bestaat, en niet op een instance van een class. Normaal gebruik je methodes van een class op deze manier:
code:
1
2
MyClass c = new MyClass();    // 1. Maak een nieuwe instance aan
c.someMethod();     // 2. Roep een methode aan op die instance


Voor een static method hoef je stap 1 niet uit te voeren, en kun je de methode meteen op de class aanroepen:
code:
1
MyClass.someMethod();


Soms is dit heel logisch. Sommige methoden hebben betrekking op een enkele instance van een class (denk aan de naam van een persoon of de kleur van een auto), en andere methoden hebben dat juist niet. Een voorbeeld daarvan is iets lastiger te bedenken, maar denk bijvoorbeeld aan een default eigenschap, bijvoorbeeld de default background color van een of andere button. Deze kleur is voor elke button natuurlijk hetzelfde, dus heeft die geen betrekking op een enkele instance van de button class.

Hoewel ik niet zo bekend ben met java lijkt de error te roepen dat de 'write' methode (dat zal die in regel 17 zijn neem ik aan) niet static is, en je gebruikt hem op dit moment wel alsof hij static is. De oplossing is dus gewoon een nieuwe instance van XMLSerializer aanmaken en daarop de write methode aan te roepen.

Mijn iRacing profiel


Acties:
  • 0 Henk 'm!

  • kaesve
  • Registratie: Maart 2009
  • Laatst online: 16-05 03:04
ik dacht toch dat static <> non-static wel erg basiskennis is.. een niet-static method zoals de write-method van XMLSerializer hebben een instance nodig van hun class, om aangeroepen te worden. een static method kan aangeroepen worden zonder dat er een instance van die class gemaakt is.
in dit geval blijkt uit je exception dat je een non-static method aanroept zonder eerst een instancec van de class aangemaakt te hebben om de method van aan te roepen.. de oplossing lijkt me dus simpel

Acties:
  • 0 Henk 'm!

  • Wirf
  • Registratie: April 2000
  • Laatst online: 14-10 15:46
Zoiets wil je waarschijnlijk hebben:

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
import net.sf.json.JSONObject;
import net.sf.json.xml.XMLSerializer;

/**
 *
 * @author liqued
 */
public class TwitterSearch {

     private XMLSerializer xmlSerializer;

     public TwitterSearch() {
          xmlSerializer = new XMLSerializer();
     }

    public void twitterKeywordSearch(String[] keywords) {
        
        if (keywords.length > 0) {

            for (int i = 0; i < keywords.length; i++) {
                String xml = new String();
                JSONObject json = JSONObject.fromObject(getTwitterKeywordRequest(keywords[i]));
                xml = xmlSerializer.write(json);
                System.out.println(xml);
            }
        } else {
            System.err.println("Error: No keywords");
        }
    }

    private String getTwitterKeywordRequest(String keyword) {
        URLRequest request = new URLRequest();
        return request.requestToString("http://search.twitter.com/search.json?q=" + keyword);
    }
}

Heeft sinds kort zijn wachtwoord weer terug gevonden!


Acties:
  • 0 Henk 'm!

  • Liqued
  • Registratie: Februari 2001
  • Laatst online: 06-08 15:21
@Wlrf ja, inderdaad. Dit had ik ook al geprobeerd, echter krijg ik dan een andere foutmelding, namelijk:
code:
1
2
Exception in thread "main" java.lang.NoClassDefFoundError: nu/xom/Serializer
        at twitterstreamreader.TwitterSearch.<init>(TwitterSearch.java:13)

Is iets mis met de library's?

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:12

Creepy

Tactical Espionage Splatterer

Ja.


....


....

En je zou zelf in staat moeten kunnen zijn om op te zoeken wat je moet doen om dat op te lossen. Kijk in je IDE hoe je een library moet toevoegen. Je mist nu echt een stukje basiskennis over je IDE en over object georienteerd programmeren.

[ Voor 21% gewijzigd door Creepy op 27-08-2010 15:57 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Wirf
  • Registratie: April 2000
  • Laatst online: 14-10 15:46
Liqued schreef op vrijdag 27 augustus 2010 @ 15:49:
@Wlrf ja, inderdaad. Dit had ik ook al geprobeerd, echter krijg ik dan een andere foutmelding, namelijk:
code:
1
2
Exception in thread "main" java.lang.NoClassDefFoundError: nu/xom/Serializer
        at twitterstreamreader.TwitterSearch.<init>(TwitterSearch.java:13)

Is iets mis met de library's?
Ja, je mist een .jar. Je kunt op jarfinder zoeken welke je mist: http://www.jarfinder.com/...earch/~nu.xom.Serializer~

Heeft sinds kort zijn wachtwoord weer terug gevonden!


Acties:
  • 0 Henk 'm!

  • Liqued
  • Registratie: Februari 2001
  • Laatst online: 06-08 15:21
Even voor de record. Het is inderdaad gefixed. Was altijd gewend om packages met punten aan te geven, maar dat zijn uiteraard directories. nu.xom.Serializer toegevoegd aan mijn Libraries en het draait perfect.

Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Liqued schreef op vrijdag 27 augustus 2010 @ 16:31:
Even voor de record. Het is inderdaad gefixed. Was altijd gewend om packages met punten aan te geven, maar dat zijn uiteraard directories. nu.xom.Serializer toegevoegd aan mijn Libraries en het draait perfect.
De naamgeving van packages IS met punten (de bestanden zelf staan in een folderstructuur die met de packages overeenkomt). Deze opmerking maakt echt duidelijk dat je echt niet weet waar je mee bezig bent, begin aub bij het begin met goede tutorials en goede boeken die Java introduceren.
Pagina: 1