Access restriction

jf

Bekanntes Mitglied
Hallo, ich habe gerade aus meinem Projekt die recht allgemeinen Klassen herausgeholt und in ein Projekt Common verschoben. Damit kann ich recht einfach diese Klassen auch in anderen Projekten einsetzen, indem ich eifach das Common-Projekt dem Classpath hinzufüge.

Dabei bin ich leider auf eine Problem gestoßen, welches ich nicht verstehe:

An der Zeile
Code:
import sun.swing.DefaultLookup;
wird folgender Fehler angezeigt:
Access restriction: The type DefaultLookup is not accessible due to restriction on required library C:\Program Files (x86)\Java\lib\rt.jar

Das Problem konnte ich beheben, indem ich als JRE System Library statt
Code:
JavaSE-1.6
das
Code:
jdk1.6.0_23
auswählte.
Was ist der Hintergrund hierfür?
 

madlion

Mitglied
Das ist jetzt nur eine Vermutung aber es könnte sein wenn du JavaSE-1.6 benutzt daß Eclipse prüft daß du nur Klassen aus der öffentlichen API verwendet werden. Und wenn mich nicht ganz irre gehört das Package sun.swing.* nicht zur öffentlichen API.
 

jf

Bekanntes Mitglied
Ok. Aber was bedeutet hier öffentlich?
- Heißt das, dass meine Anwendung ein SDK voraussetzt - und nicht läuft, wenn nur eine JRE installiert ist?
 

faetzminator

Gesperrter Benutzer
Das heisst, dass deine Anwendung nur auf JVM's von Sun bzw. nun Oracle läuft. Man sollte also bei Software, die man verbreiten will, niemals Packages wie [c]com.sun[/c], [c]com.ibm[/c] etc. verwenden.
Was macht diese interne Klasse? Gibts da nichts in [c]javax.swing[/c], was das gleiche kann?
 

jf

Bekanntes Mitglied
Man sollte also bei Software, die man verbreiten will, niemals Packages wie [c]com.sun[/c], [c]com.ibm[/c] etc. verwenden.
Ok. Ich hatte eigentlich nicht vor, die Anwendung zu verbreiten, dennoch würde ich gern von der Bibliothek wegkommen.

Was macht diese interne Klasse? Gibts da nichts in [c]javax.swing[/c], was das gleiche kann?
Keine Ahnung. Die Bibliothek wird in einem CellRenderer verwendet, welcher in einer JList eingesetzt wird, um Zeilenumbrüche und Tabulator-Sprünge in den Listen-Einträgen darstellen zu können.
Ich habe ihn mit vielen Informationen aus dem Netz zusammengeschrieben. Durch den CellRenderer wird meine Anwendung leider auch etwas instabiler (vor allem bei sehr vielen Daten) - ich habe hier aber auch mit Unterstützung aus verschiedenen Foren keine Lösunge finden können. Die Anwendung ist zwar mittlerweile verwendbar, aber es gibt doch ab und an immer mal ein Einfrieren des Programms, welches dann gewaltsam getötet werden muss.
Auch aus diesem Grund bin ich gern gewillt, hier verschiedenes auszuprobieren.
Habt ihr evtl. ein paar Tipps, wie ich eine Verbesserung erreichen könnte?

Java:
@SuppressWarnings("serial")
class TabRenderer extends JTextArea implements ListCellRenderer {	// JTextArea supports tabs - JTextField and JLabel not!
    
	/**
	 * An empty <code>Border</code>. This field might not be used. To change the
	 * <code>Border</code> used by this renderer override the 
	 * <code>getListCellRendererComponent</code> method and set the border
	 * of the returned component directly.
	 */
	private static final Border SAFE_NO_FOCUS_BORDER = new EmptyBorder(1, 1, 1, 1);
	private static final Border DEFAULT_NO_FOCUS_BORDER = new EmptyBorder(1, 1, 1, 1);
	protected static Border noFocusBorder = DEFAULT_NO_FOCUS_BORDER;
 
	
	private Border getNoFocusBorder() {
		Border border = DefaultLookup.getBorder(this, ui, "List.cellNoFocusBorder");
		if(System.getSecurityManager() != null) {
			if (border != null) return border;
			return SAFE_NO_FOCUS_BORDER;
		} else {
			if(border != null && (noFocusBorder == null || noFocusBorder == DEFAULT_NO_FOCUS_BORDER)) {
				return border;
			}
			return noFocusBorder;
		}
	}

	public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus){
		setComponentOrientation(list.getComponentOrientation());

		Color bg = null;
        Color fg = null;

        JList.DropLocation dropLocation = list.getDropLocation();
        
        if(dropLocation != null && !dropLocation.isInsert() && dropLocation.getIndex() == index) {
        	bg = DefaultLookup.getColor(this, ui, "List.dropCellBackground");
        	fg = DefaultLookup.getColor(this, ui, "List.dropCellForeground");
        	isSelected = true;
        }

	 	if(isSelected) {
	 		setBackground(bg == null ? list.getSelectionBackground() : bg);
	 		setForeground(fg == null ? list.getSelectionForeground() : fg);
	 	} else {
	 		setBackground(list.getBackground());
	 		setForeground(list.getForeground());
	 	}

	 	/*
	 	if(value instanceof Icon) {
	 		setIcon((Icon)value);
	 		setText("");
	 	} else {
	 		setIcon(null);
	 		setText((value == null) ? "" : value.toString());
	 	}
	 	*/

	 	setEnabled(list.isEnabled());
	 	setFont(list.getFont());
         
	 	Border border = null;
	 	if(cellHasFocus) {
	 		if(isSelected) {
	 			border = DefaultLookup.getBorder(this, ui, "List.focusSelectedCellHighlightBorder");
	 		}
	 		if(border == null) {
	 			border = DefaultLookup.getBorder(this, ui, "List.focusCellHighlightBorder");
	 		}
	 	} else {
	 		border = getNoFocusBorder();
	 	}
	 	setBorder(border);

	 	this.setDocument(new PlainDocument());     
	 	this.setText(value.toString()); 
	 	this.setTabSize(2);

	 	return this;
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J WARNING: An illegal reflective access operation has occurred, beim Compilieren von JasperReports, was bedeutet das ? Allgemeine Java-Themen 23
Bluedaishi Access violation error Allgemeine Java-Themen 2
T Frage zu Access Modifiers Allgemeine Java-Themen 6
E To count password and username access possibility Allgemeine Java-Themen 10
F Alternative sun.jdbc.odbc.JdbcOdbcDriver (Access Datenbank) Allgemeine Java-Themen 2
B Load Library and use JNA to access Allgemeine Java-Themen 3
S Access Restrictions in Eclipse auf Code beschraenken (und nicht fuer Comments) Allgemeine Java-Themen 2
C Klassen Warning "synthetic access" bei innerer Klasse Allgemeine Java-Themen 15
T access$800 Allgemeine Java-Themen 8
J Nice Office Access und Mac Allgemeine Java-Themen 6
S Concurrency access auf eine Map Allgemeine Java-Themen 6
M Access Frontend als Webanwendung Allgemeine Java-Themen 8
S Innere Klassen und die statische Methode access$x Allgemeine Java-Themen 5
B Access-Befehle werden in der falschen Reiehnfolge ausgeführt Allgemeine Java-Themen 4
timomeinen Access Modifier vor Kompilierung ändern Allgemeine Java-Themen 9
P access denied / policy problem Allgemeine Java-Themen 4
W Daten in Access einfügen über Java Allgemeine Java-Themen 21
M Stärkerer access-modifier als "private"? Allgemeine Java-Themen 17
H Applet - java.security.AccessControlException: access. Allgemeine Java-Themen 6
D Mit Java Daten aus Access holen und als VCard versenden Allgemeine Java-Themen 3
W Sonderzeichen in Access 97 schreiben Allgemeine Java-Themen 2
J MS Access mit Java ansprechen Allgemeine Java-Themen 3
T Word, Excel u. Access API Allgemeine Java-Themen 2
M Access lässt sich nicht über "exec(command)" start Allgemeine Java-Themen 3
J MS Access-Reports steuerung mit Java Allgemeine Java-Themen 6
G JComboBox mit Werten aus einer Access Datenbank füllen Allgemeine Java-Themen 18
C access control list in java Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben