NPE (access$1)

Status
Nicht offen für weitere Antworten.

hdi

Top Contributor
EDIT
Ach shit sorry Leute, ich hab veraltete Versionen der Klassen genutzt. Aber ich schieb gleich mal ne andere Frage rein: Wenn ich ein Projekt habe, in dem allerhand nützlicher Klassen sind, und ich möchte dass andere Projekte diese Bibliotheken nutzen, wie mache ich das am besten? Ich habs jetzt als Jar exportiert und in mein anderes Projekt eingefügt. Aber wenn ich jetzt daran was ändern will, muss ich es wieder exportieren und wieder einfügen. Sonst hab ich ne alte Version, und das war hier ja auch grad mein Denkfehler. Aber das ist ja recht umständlich...
Kann ich es irgendwie einstellen dass mein Projekt immer die aktuelle Version eines anderen Projektes nimmt? Am besten dass er beim Build immer das andere Projekt zuerst kompiliert und danach mit reinpackt... Das er quasi beim Compilen automatisch die Referenzierte Bibltiothek neu compiled.

Hi, ich bekomme ne NPE wie folgt:

Exception in thread "main" java.lang.NullPointerException
at de.klutsch.utilities.gui.LockableJFrame$LockPane.access$1(LockableJFrame.java:80)
at de.klutsch.utilities.gui.LockableJFrame.setLockedLook(LockableJFrame.java:68)
at de.klutsch.utilities.gui.LockableJFrame$LockPane.<init>(LockableJFrame.java:89)
at de.klutsch.utilities.gui.LockableJFrame.setupGlassPane(LockableJFrame.java:43)
at de.klutsch.utilities.gui.LockableJFrame.<init>(LockableJFrame.java:29)
at MyFrame.<init>(MyFrame.java:6)
at MyFrame.main(MyFrame.java:9)

dieses .access$1 heisst scheinbar, dass er denkt ein Objekt sei schon instantiiert, obwohl es das nicht ist?! Sagte mir Google.

Also was ich nicht verstehe ist, wie er überhaupt auf die Idee kommt, die Methode "setLockedLook" aufzurufen. Das ist schwarze Magie, weil ich mach das nicht. Hier die Klasse:

Java:
package de.klutsch.utilities.gui;

import java.awt.Color;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.GraphicsConfiguration;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
/**
 * 
 * @author Thomas Klutsch 02.12.2009 A JFrame that can be locked/unlocked. The
 *         frame does not react on any user interaction in locked state, i.e.
 *         you cannot use components within the frame, nor resize or move it.
 *         During locked state, a semi-transparent glass pane is laid above the
 *         whole frame, optionally also displaying a message.
 */
public class LockableJFrame extends JFrame {

	private LockPane lockPane;

	public LockableJFrame() {
		super();
		setupGlassPane();
	}

	public LockableJFrame(String title) {
		super(title);
		setupGlassPane();
	}

	public LockableJFrame(String title, GraphicsConfiguration gc) {
		super(title, gc);
		setupGlassPane();
	}

	private void setupGlassPane() {
		lockPane = new LockPane();
		setGlassPane(lockPane);
	}

	public void lock() {
		lock(null);
	}

	public void lock(String msg) {
		setEnabled(false);
		setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
		lockPane.msg = msg;
		lockPane.setVisible(true);
		lockPane.requestFocusInWindow();
	}

	public void unlock() {
		lockPane.setVisible(false);
		setCursor(Cursor.getDefaultCursor());
		requestFocus();
		setEnabled(true);
	}

	public void setLockedLook(Font msgFont, Color msgColor,
			Color backgroundColor) {
		lockPane.msgFont = msgFont;
		lockPane.msgColor = msgColor;
		int red = backgroundColor.getRed();
		int green = backgroundColor.getGreen();
		int blue = backgroundColor.getBlue();
		lockPane.backgroundColor = new Color(red, green, blue, 150);
		lockPane.boxBackgroundColor = new Color(red, green, blue, 200);
	}

	private class LockPane extends JPanel implements KeyListener {

		private String msg;
		private Font msgFont;
		private Color msgColor;
		private Color backgroundColor;
		private Color boxBackgroundColor;

		public LockPane() {
			setOpaque(false);
			setFocusTraversalKeysEnabled(false);
			addKeyListener(this);
		}

		@Override
		protected void paintComponent(Graphics g) {
			super.paintComponent(g);
			int width = getWidth();
			int height = getHeight();
			g.setColor(backgroundColor);
			g.fillRect(0, 0, width, height);
			if (msg != null && !msg.trim().isEmpty()) {
				// calculate positions
				g.setFont(msgFont);
				FontMetrics m = g.getFontMetrics();
				Point msgCenter = StringCentering.getCenter(msg, m, width,
						height);
				int msgToBoxGap = 10;
				Point boxPos = new Point(msgCenter.x - msgToBoxGap, msgCenter.y
						- m.getAscent() - msgToBoxGap);
				int stringWidth = m.stringWidth(msg);
				int stringHeight = m.getHeight();

				// draw message box
				g.setColor(boxBackgroundColor);
				g.fillRoundRect(boxPos.x, boxPos.y, stringWidth + msgToBoxGap,
						stringHeight + msgToBoxGap, 10, 10);
				g.setColor(msgColor);
				g.drawRoundRect(boxPos.x, boxPos.y, stringWidth + msgToBoxGap,
						stringHeight + msgToBoxGap, 10, 10);

				// draw message text
				g.setColor(msgColor);
				g.drawString(msg, msgCenter.x, msgCenter.y);
			}
		}

		@Override
		public void keyPressed(KeyEvent e) {
			e.consume();
		}

		@Override
		public void keyReleased(KeyEvent e) {
			e.consume();
		}

		@Override
		public void keyTyped(KeyEvent e) {
			e.consume();
		}
	}
}

Mein Programm:
Java:
public class MyFrame extends LockableJFrame{

	public static void main(String[] args) {
		MyFrame f= new MyFrame();
	}
}

...bin ich jetzt doof ???:L
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Kommt auf die IDE an: Bei Eclipse kann man das mit den "Referenced Projects" machen - man bearbeitet die ganz normal, aber eben getrennt voneinander...
 

hdi

Top Contributor
Coole Sache, eine Frage noch: Packt er mir jetzt immer das komplette referenzierte Projekt rein beim Build, oder ist er so schlau und nimmt nur die tatsächlich genutzten Klassen daraus mit rein? Denn so ein allgemeines Projekt für allerhand Hilfsklassen sollte natürlich nicht komplett in ein Projekt übernommen werden, nur weil ich grad ne kleine Kasse daraus nutze.

Danke
 

Marco13

Top Contributor
Hm - was heißt "reinpacken"? WAS genau er intern macht, weiß ich nicht, aber in bezug auf die Ausführung wird es wird effektiv nicht viel mehr sein, als den Classpath des referenzierenden Projektes um das "classes"-Verzeichnis des referenzierten Projektes zu ergänzen. Das sind immernoch unterschiedliche Projekte. Wenn man NUR vom referenzierenden Projekt eine JAR erstellen würde, würde er motzen, dass ihm das referenzierte Projekt fehlt, wohingegen man das referenzierte natürlich jederzeit in eine eigenständige JAR packen kann. Die Referenz geht ja nur in eine Richtung. Wie die Verwendung einer JAR, nur dass man sich eben um deren Aktualisierung keine Gedanken machen muss... ;)
 

hdi

Top Contributor
Äh achso versteh ich das jetzt falsch: Wird denn beim exportieren des Projektes nicht alles mit in die Jar gepackt, was aus dem referenzierten Projekt gebraucht wird? Also das ist die Frage: Was übernimmt er da? Alles? Nichts? Oder nur die Klassen, die im Projekt auch tatsächlich genutzt werden.
 

Marco13

Top Contributor
Beim Erstellen einer JAR kann man eigentlich explizit angeben, was mit reingepackt werden soll - und wenn man nur das Hauptprojekt reinpackt, dann ist auch nur das drin.... Man kann zwar "manuell" auch die benötigten Klassen aus dem referenzierten Projekt hinzufügen, aber dann kann man AFAIK nicht sicher sein, dass wirklich alle Referenzen aufgelöst (d.h. wirklich alle benötigten Klassen vorhanden) sind.
 

musiKk

Top Contributor
Wie schwer ist es denn, zwei Klassen in ein Projekt zu packen, nur eine davon in einem anderen Projekt zu verwenden, ein JAR zu exportieren und nachzusehen?
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben