access$800

TheFan1968

Mitglied
Hallo zusammen!

Ich suche schlicht nach Hinweisen, was oder woher schlicht die schon in der Überschrift angedeutete Fehlermeldung zu bedeuten hat...;(
Mit der Zeile kann ich schlicht nichts anfangen und man findet auch sehr wenig im Netz...

Sie stammt aus einer sonst problemfrei laufenden Anwendung, in der zum Zeitpunkt der Fehlermeldung versucht wird eine Liste mit Daten zu drucken.
Dabei müssen gewisse Datenfelder anonymisiert werden, weshalb versucht wird vor dem Druckvorgang eine Variable zu setzen (ohne den Versuch die Variable zu setzen, also ohne Anonymisierung, läuft alles bestens.

Hier zunächst mal die Fehlermeldung:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at labviewer.DataManager.setExternModus(DataManager.java:146)
at labviewer.LabGui.DateiListenDruckActionPerformed(LabGui.java:1484)
at labviewer.LabGui.access$800(LabGui.java:46)
at labviewer.LabGui$11.actionPerformed(LabGui.java:1221)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:809)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:850)
at java.awt.Component.processMouseEvent(Component.java:6288)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6053)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4651)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:616)
at java.awt.EventQueue$2.run(EventQueue.java:614)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Der Quelltextausschnitt dazu:
[JAVA=1482]if (Druck.getDruckPatListVerExt().isSelected()){
try {
this.Data.setExternModus(1);
patListe.print(JTable.PrintMode.FIT_WIDTH
, new MessageFormat("LabViewer - Patienten veranl. LANR "+GuiLanr.getText())
, new MessageFormat("KV Berlin - Anonymisierte Liste - "+System.getProperty("user.name")+" - "+dtf.format(dt)));
this.Data.setExternModus(0);
} catch (PrinterException ex) {
lerror.showErrorMessage(6, this, ex.toString());
}
}[/code]

Hat jemand einen Tipp? Vielen Dank!
 

Marco13

Top Contributor
Diese Klassen mit $ im Namen sind anonyme innere Klassen - in diesem Fall ein ActionListener, aus dem heraus auf die umgebende Klasse zugegriffen wird.
 
S

SlaterB

Gast
speziell access kommt noch dazu, wenn eben Access für eine normalerweise nicht zugängliche Methode eingebaut werden muss,
siehe:
Java:
package test;

public class Test {

    public static void main(String... args)   {
        Runnable r = new Runnable()   {
                public void run()     {
                    Test t = new Test();
                    t.x();
                    t.y();
                }
            };
        r.run();
    }

    private void x()  {
        new Error("x").printStackTrace();
    }

    protected void y()  {
        new Error("y").printStackTrace();
    }
}
Ausgabe:
Code:
java.lang.Error: x
	at test.Test.x(Test.java:29)
	at test.Test.access$0(Test.java:27)
	at test.Test$1.run(Test.java:20)
	at test.Test.main(Test.java:24)
java.lang.Error: y
	at test.Test.y(Test.java:34)
	at test.Test$1.run(Test.java:21)
	at test.Test.main(Test.java:24)

> Also vermutest du eher ein Thread-Problem

der Grund für den Fehler ist bisher komplett unklar, kann alles mögliche sein,
angefangen bei schlicht irgendwo einer null-Variablen
 

TheFan1968

Mitglied
Das sind schon mal zwei gute Hinweise: Tatsächlich wird ja etwas in einem anderem Thread und einer anderen Klasse aufgerufen...
Ich werde erst einmal versuchen herauszufinden, ob nicht doch etwas schlicht "null" ist, denn die Zeilennummer 46 ist schlicht die Startzeile der Klasse LabGui.

Ist möglicherweise an diesem ActionListener was falsch, was ich so nicht sehe?

[JAVA=1219]DateiListenDruck.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
DateiListenDruckActionPerformed(evt);
}
});[/code]
Der wird ja immerhin auch als Fehler gemeldet...

at labviewer.LabGui$11.actionPerformed(LabGui.java:1221)
 
S

SlaterB

Gast
die Fehlermeldung besagt, dass dort vorbeigekommen wird, der Code enthält aber nur den Aufruf einer Methode,
dabei kann einfach nichts falsch sein, mal abgesehen davon dass Methoden besser kleingeschrieben werden,

> at labviewer.LabGui.DateiListenDruckActionPerformed(LabGui.java:1484)
wie die Fehlermeldung korrekt weiterzulesen ist wird es innerhalb der Methode dann spannender, aber auch dort wird wieder nur etwas aufgerufen,
wobei letzlich diese Methode DateiListenDruckActionPerformed vielleicht zu ändern ist

> at labviewer.DataManager.setExternModus(DataManager.java:146)
hier schließlich ist die aktuell die Fehlerstelle
 

TheFan1968

Mitglied
Gut... aus der Druck-Methode für die Zeile
[JAVA=1484]this.Data.setExternModus(1);[/code]

in die Klasse DataManager
[JAVA=145]public void setExternModus(int modus) {
this.LabData.setExternModus(modus);
}[/code]

Die ihrerseit das TableModel LabData der Daten aufruft um den ExternModus zu setzen
[JAVA=168]public void setExternModus(int ExternModus) {
this.ExternModus = ExternModus;
}[/code]
Die Variable ExternModus wird als
private int ExternModus = 0;
initialisiert... ist also nicht null.

Wo diese NullPointerException herkommt, will mir noch nicht klarwerden, aber daran kann man zumindest arbeiten...

Danke also schon mal für die Hinweise :)
 
S

SlaterB

Gast
du musst das wirklich exakt anschauen und genau verstehen, wobei hier unterschiedliche Methodennamen helfen würden,

aber auch so sollte klar sein, dass der Fehler in setExternModus() in DataManager auftritt, so heißt es doch exakt im StackTrace,
damit ist nicht gemeint, das noch eine weitere Methode aufgerufen wird, sonst würde es da stehen,
der Quellcode der TableModel-Methode ist also zunächst irrelevant

aus der Konstellation bleibt als einziger logischer Schluss, dass die Variable this.LabData null ist
 

TheFan1968

Mitglied
Guten Morgen!

Gestern hatte mich dann glatt mal der Feierabend überrascht... ;)

Ja tatsächlich this.LabData ist an der Stelle null, was natürlich zu dem Fehler führt.
Die Variable wird nur unter bestimmten Bedingungen überhaupt gefüllt und die Lösung lautet schlicht der Methode setExternModus noch um die Prüfung beizufügen, ob LabData gleich null ist und sich dann ggf. eine Instanz zu besorgen.

Es bleibt dann noch, die "historisch gewachsene" Anwendung mal etwas zu entschlacken...

Vielen Dank also für eure guten Tipps! :)
 

Neue Themen


Oben