Zum Inhalt springen

cannot resolve symbol


korea1

Empfohlene Beiträge

hi,

bei folgendem schnipsel bekomme ich obige fehlermeldung. was ist falsch?


public final class MyXMLFilter extends XMLFilterImpl {

public MyXMLFilter(XMLReader parent) throws SAXException {
super(parent);
}

public void characters(char[] ch, int start, int length) throws SAXException{
//System.out.print(" method characters ");
//System.out.print(" ch ");
//System.out.print(" start ");
//System.out.print(" length ");
}

static public void main(String[] args) throws Exception {

System.out.print(" main2 ");

characters("hallo", 1, 5);
}
}
[/PHP]

irgendetwas mag er am aufruf der funktion nicht. aber was??

danke korea1

Link zu diesem Kommentar
Auf anderen Seiten teilen

ok,

danke. ich hatte vorher zwar auch schon einzelne buchstaben, aber leider in "".

scheinbar is das also nich egal.

hm ok.

aber jetzt bekomme ich folgende fehlermeldung:

non-static method characters(char[],int,int) cannot be referenced from a static context

hier nochmal mein quelltext:


public final class MyXMLFilter extends XMLFilterImpl {

public MyXMLFilter(XMLReader parent) throws SAXException {
super(parent);
}

public void characters(char[] ch, int start, int length) throws SAXException {

}

static public void main(String[] args) throws Exception {

System.out.print(" main2 ");
char[] my_char = { 'h', 'a', 'l', 'l', 'o' };
characters(my_char, 1, 5);
}
}
[/PHP]

korea1

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja, es ist ja auch richtig, dass du aus einer static-Methode keine nicht static-Methode aufrufen kannst. Aus einer static-Methode kannst du nur Methoden aufrufen, die gelöst von einem Objekt lauffähig sind. Dies sind andere static-Methoden. Für diese Methoden ist keine Instanzierung einer Klasse nötig.

Du könntest Abhilfe schaffen, indem du:

1. die static main() in eine andere Klasse schreibst und von dort ein Objekt deiner Klasse anlegst und die gewünschte Methode à la objekt.methode() aufrufst

2. in deiner static main() ein Objekt der eigenen Klasse anlegst und dann de facto genauso verfährst.

Was du tust hängt davon ab, ob du in deiner XML-Klasse eine main() haben willst oder nicht...

Hoffe, das wird so deutlich. Sonst kann ich morgen mal Code-Beispiele posten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

hi,

also die vorgabe für mich is, dass die main in der klasse sein muss.

mein code sieht jetzt so aus und ich bekomm folgende fehlermeldung:

MyXMLFilter.java:40: cannot resolve symbol

symbol : variable XMLReader

location: class MyXMLFilter

MyXMLFilter my_filter = new MyXMLFilter(XMLReader);

^


public final class MyXMLFilter extends XMLFilterImpl {

public MyXMLFilter(XMLReader parent) throws SAXException {
super(parent);
}

public void characters(char[] ch, int start, int length) throws SAXException {

}

static public void main(String[] args) throws Exception {

MyXMLFilter my_filter = new MyXMLFilter(XMLReader);
System.out.print(" main2 ");
char[] my_char = { 'h', 'a', 'l', 'l', 'o' };
my_filter.characters(my_char, 1, 4);
}
}
[/PHP]

wenn ich ein objekt meiner klasse anlegen möchte, dann muss ich dass doch so machen:

klasse obj_name = new konstruktor

da mein konstruktor einen parameter hat müsste dass doch so gehen, oder?

könntest du vielleicht doch mal ein code beispiel posten?

danke korea1

Link zu diesem Kommentar
Auf anderen Seiten teilen

hi,


XMLReader my_reader = new XMLReader();
MyXMLFilter my_filter = new MyXMLFilter(my_reader);
[/PHP]

das bringt folgenden fehler:

MyXMLFilter.java:61: org.xml.sax.XMLReader is abstract; cannot be instantiated

XMLReader my_reader = new XMLReader();

^

so funktionierts auch net:

[PHP]MyXMLFilter my_filter = new MyXMLFilter(new XMLReader);

bringt folgenden fehler:

MyXMLFilter.java:62: '(' or '[' expected

MyXMLFilter my_filter = new MyXMLFilter(new XMLReader);

^

MyXMLFilter.java:62: ')' expected

MyXMLFilter my_filter = new MyXMLFilter(new XMLReader);

^

und so gings auch net:

MyXMLFilter my_filter = new MyXMLFilter(new XMLReader());

das bringt dann diesen fehler:

MyXMLFilter.java:62: org.xml.sax.XMLReader is abstract; cannot be instantiated

MyXMLFilter my_filter = new MyXMLFilter(new XMLReader());

^

hab ich dich falsch verstanden, oder wie hast du das gemeint?

korea1

Link zu diesem Kommentar
Auf anderen Seiten teilen

hi,

prinzipiell gehts so:

package de.myTest.test;

public class TestClass {

    public static void main(String[] args) {

        TestClass testClass = new TestClass(new TestClass2());      // create an instance of TestClass

        testClass.doSomething();                                                       // call instance of TestClass to do something

    }

    // Constructor

    public TestClass() {

        System.out.println("TestClass.TestClass");

    }

    // business-logic implementation

    private void doSomething() {

        System.out.println("TestClass.doSomething");

    }

}

package de.myTest.test;

public class TestClass2 {

    public TestClass2() {

    }

    public void doSomething(){

        System.out.println("TestClass2.doSomething");

    }

}

in der statischen main-methode wird eine instanz der klasse erzeugt und deren nicht-statischen methoden können aufgerufen werden.

[edit]

sorry, hatte zuerst den falchen code kopiert, sollte jetzt so stimmen ;-)so

[/edit]

bei weiteren fragen einfach posten...

Link zu diesem Kommentar
Auf anderen Seiten teilen

zweifle ich an mir. :(

hier nochmal mein code:


public final class MyXMLFilter extends XMLFilterImpl {

public MyXMLFilter(XMLReader parent) throws SAXException {
super(parent);
}


private static void usage() {
System.err.println("Usage: MyXMLFilter <input.xml> <output.xml>");
System.exit(1);
}

public void characters(char[] ch, int start, int length) throws SAXException {
System.out.print(" bin drin ");
}

static public void main(String[] args) throws Exception {

// Parse arguments
if (args.length != 2) {
usage();
}

String inputFile = args[0];
String outputFile = args[1];
MyXMLFilter my_filter = new MyXMLFilter(new XMLReader());
my_filter.characters(my_char, 1, 4);

SAXParserFactory spf = SAXParserFactory.newInstance();

spf.setNamespaceAware(true);

SAXParser saxParser = spf.newSAXParser();

XMLReader xmlReader = saxParser.getXMLReader();

MyXMLFilter filter = new MyXMLFilter(xmlReader);

Transformer transformer = TransformerFactory.newInstance().newTransformer();

Source source = new SAXSource(filter, new InputSource(new FileInputStream(inputFile)));

Result result = new StreamResult(new FileOutputStream(outputFile));
transformer.transform(source, result);
}
}
[/PHP]

könnte mir mal bitte jmd die richtige code zeile posten. ich hab keine ahnung mehr was da nicht passt.

huch ein fehler is weg, da hab ich vergessen meine kommentare rauszunehmen, aber der is geblieben::floet:

MyXMLFilter.java:55: org.xml.sax.XMLReader is abstract; cannot be instantiated

MyXMLFilter my_filter = new MyXMLFilter(new XMLReader());

^

danke korea1

kann es vielleicht sein, dass er ein prob damit hat, dass ich ein zweites obj. anlege.

hab ja schon mal ein obj. von dieser klasse erzeugt --> filter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hier weiter zu machen, hat überhaupt keinen Sinn.

Nimm dir ein Javabuch zur Hand www.javabuch.de und gehe zumindest die Kapitel über objektorientierung und Methodendeklarationen durch.

Dieses try and error führt doch zu nix.

Gruß Jaraz

PS: Wenn deine IDE das unterstütz, schalte mal die Fehleranzeige während der Eingabe an, dann passieren falsche Konstruktoren Aufrufe gar nicht erst.

Falls Sun One das nicht kann, nimm Idea, Eclipse oder JBuilder.

Link zu diesem Kommentar
Auf anderen Seiten teilen

hi,

also ich hatte mir oop in java schon auf mehreren internetseiten durchgelesen, das hatte mich aber nich weitergebracht.

in c++ hab ich eigentlich keine probs mit der oop. und in java isses ja nich großartig anders.

ich habs jetzt aber so gelöst und es kommt kein fehler mehr.


public final class MyXMLFilter extends XMLFilterImpl {

public MyXMLFilter(XMLReader parent) throws SAXException {
super(parent);
}


private static void usage() {
System.err.println("Usage: MyXMLFilter <input.xml> <output.xml>");
System.exit(1);
}

public void characters(char[] ch, int start, int length) throws SAXException {
System.out.print(" bin drin ");
}

static public void main(String[] args) throws Exception {

if (args.length != 2) {
usage();
}

String inputFile = args[0];
String outputFile = args[1];

System.out.print(" main ");
char[] my_char = { 'h', 'a', 'l', 'l', 'o' };

SAXParserFactory spf = SAXParserFactory.newInstance();

spf.setNamespaceAware(true);

SAXParser saxParser = spf.newSAXParser();

XMLReader xmlReader = saxParser.getXMLReader();

MyXMLFilter filter = new MyXMLFilter(xmlReader);
filter.characters(my_char, 1, 4);

Transformer transformer = TransformerFactory.newInstance().newTransformer();

Source source = new SAXSource(filter, new InputSource(new FileInputStream(inputFile)));

Result result = new StreamResult(new FileOutputStream(outputFile));
transformer.transform(source, result);
}
}
[/PHP]

danke euch allen korea1

Link zu diesem Kommentar
Auf anderen Seiten teilen

Servus nochmal,

also: Diese Klasse XMLReader ist scheinbar abstrakt. Deshalb kannst Du sie nicht instanzieren. Du musst also eine eigene Klasse schreiben, die von XMLReader erbt und die Methoden implementiert.

Und allgemein: Jaraz sein Tip ist der einzig wahre. Buch nehmen und lernen. Und soviel anders ist es bei Java nicht (im Vergleich zu C++). Nur funktioniert das, was Du hier probiert hast, dort auch nicht.

Du kannst ja die OOP-Kapitel überspringen.

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

hi,

also ich hab hier im betrieb ne aufgabe bekommen, die ich so schnell wie möglich lösen soll. da mir hier im betrieb keiner was zeigt und ich nicht weiter kam hab ich eben hier mal nachgefragt.

wenn ich die zeit dazu habe, dann nehm ich mir auch gern ein buch in die hand und lern das zeug selbst. im moment ist das aber leider nicht der fall.

das programm hat so wie es hier drin is keinen sinn, aber ich wollte auch erst mal den fehler beseitigen. die funktionalität kommt jetzt.

falls der eindruck entstanden sein sollte, dass ich zu faul zum lesen bin, dann kann ich euch beruhigen, das ist nicht der fall. ;)

wenn von euch aber etwas in kürzester zeit gefordert wird und ihr keine zeit zum einarbeiten bekommt, was würdet ihr dann tun?? ich hab eben hier gepostet.

mfg korea1

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...