Hallo,
hab hier ein komisches Problem, das ich nicht verstehe. Gegeben ist folgender Code:
und
Der Code ist natürlich hier stark gekürzt. Folgendes Problem tritt auf: Wenn ich ein Objekt CombinedChart habe und (über Umwege) in die Methode "addData" laufe, bricht mir das Programm im try/catch-Block ab mit nur folgender Meldung:
charts.basic.CombinedChart.setXYLineAndShapeRenderer(java.lang.Integer)
Die Methode gibt es in Klasse "Chart", allerdings nicht in Klasse "CombinedChart". Da aber die Klasse von "Chart" erbt, müsste das doch problemlos laufen, oder nicht? Der Abbruch passiert bei "m.invoke", es gibt die Methode die ausgeführt werden sollte und es sind alle Variablen korrekt belegt. Wenn ich die Methode, die per Reflection aufgerufen werden sollte manuell ausführe (this.xxxx), dann geht das astrein; scheinbar liegt das Problem irgendwo bei der Reflection.
Kann mir hier jemand einen Tipp geben? Bin jetzt nicht unbedingt neu in Java, aber das verstehe ich nun überhaupt nicht. Leider fand ich zu dem Thema auch keine Infos bei Google.
Danke und Gruß
DEV
EDIT:
Habe nun testweise die Methode die nicht ausgeführt wird mal in die Klasse "CombinedChart" aufgenommen und leite weiter zu "super"; das geht, ist aber nicht Sinn und Zweck der Vererbung denk ich mal. Kann mir das jemand erklären wo hier der "Bug" ist?
Danke,
DEV
hab hier ein komisches Problem, das ich nicht verstehe. Gegeben ist folgender Code:
Code:
public class CombinedChart extends Chart
{
private JPanel PANEL = new JPanel();
private TreeMap<Integer, ChartModel> CHARTS = new TreeMap<Integer, ChartModel>();
public CombinedChart(Chart chart)
{
this(chart, 1);
}
public CombinedChart(Chart chart, int weight)
{
super();
.....
}
}
und
Code:
public class Chart extends ChartPanel
{
public Integer addData(...)
{
.....
try
{
Method m = this.getClass().getDeclaredMethod("set"+renderer.RENDERER, new Class[] {Integer.class});
m.invoke(this, index);
}
catch(Exception ex)
{
Main.MSG("Chart::addData:catch("+ex.getLocalizedMessage()+")", Main.MSG_ERROR);
}
tuneChart();
return index;
}
}
Der Code ist natürlich hier stark gekürzt. Folgendes Problem tritt auf: Wenn ich ein Objekt CombinedChart habe und (über Umwege) in die Methode "addData" laufe, bricht mir das Programm im try/catch-Block ab mit nur folgender Meldung:
charts.basic.CombinedChart.setXYLineAndShapeRenderer(java.lang.Integer)
Die Methode gibt es in Klasse "Chart", allerdings nicht in Klasse "CombinedChart". Da aber die Klasse von "Chart" erbt, müsste das doch problemlos laufen, oder nicht? Der Abbruch passiert bei "m.invoke", es gibt die Methode die ausgeführt werden sollte und es sind alle Variablen korrekt belegt. Wenn ich die Methode, die per Reflection aufgerufen werden sollte manuell ausführe (this.xxxx), dann geht das astrein; scheinbar liegt das Problem irgendwo bei der Reflection.
Kann mir hier jemand einen Tipp geben? Bin jetzt nicht unbedingt neu in Java, aber das verstehe ich nun überhaupt nicht. Leider fand ich zu dem Thema auch keine Infos bei Google.
Danke und Gruß
DEV
EDIT:
Habe nun testweise die Methode die nicht ausgeführt wird mal in die Klasse "CombinedChart" aufgenommen und leite weiter zu "super"; das geht, ist aber nicht Sinn und Zweck der Vererbung denk ich mal. Kann mir das jemand erklären wo hier der "Bug" ist?
Danke,
DEV
Zuletzt bearbeitet: