Probleme beim Klassen-Import von sun.misc. ...

AndyFFW

Mitglied
Hallo,
Ich habe in einer Klasse 2 Importe: - sun.misc.Resource und sun.misc.URLClassPath - Bei diesen erhalte ich die Fehlermeldung: " Zugriffseinschränkung: Der Typ (Import) ist nicht zugänglich aufgrund einer Beschränkung in der erforderlichen Bibliothek - Java\lib\rt.jar - "

Nach na weile googlen habe ich diesen Problem nicht gefunden. Ich habe auch in dem Pfad nachgeschaut und die Klassen befinden sich auch dort. Ein
Java:
import sun.misc.*;
hat natürlich auch keine Abhilfe geschaffen.

Hoffe jmnd hat die Lösung. Danke
 

tfa

Top Contributor
Ganz einfach: Importiere diese Klassen nicht! Die gehören nicht zur veröffentlichten API und sollten nicht direkt verwendet werden.
 
T

tröööt

Gast
alles was man nicht auf Java Platform SE 7 gehört nicht zur offiziellen API sondern ist teil der jeweiligen propiertären implementierung des VM-entwicklers ...

das ist ein grundsatz in der java-entwicklung ... entwickler die dagegen "verstoßen" und dies dann so auch noch publizieren sollten sich nicht wundern wenn ihre user probleme bekommen ...

wenn also der verwendete code eine oracle VM einer bestimmten version verlangt musst du dieser verwenden um den code lauffähig zu bekommen ... oder du schreibst den code soweit um das er SE-konform ist ...

aus erfahrung kenne ich die beiden genannten klassen nur aus reflection-codes die irgendwas mit classloadern zu tun haben ... vieles davon kann man auch anders lösen ...

ansonsten wäre es , um dir zu helfen , auch sinnvoll wenn du mal linkst was du nutzen willst ...
 

AndyFFW

Mitglied
alles was man nicht auf Java Platform SE 7 gehört nicht zur offiziellen API sondern ist teil der jeweiligen propiertären implementierung des VM-entwicklers ...

das ist ein grundsatz in der java-entwicklung ... entwickler die dagegen "verstoßen" und dies dann so auch noch publizieren sollten sich nicht wundern wenn ihre user probleme bekommen ...

wenn also der verwendete code eine oracle VM einer bestimmten version verlangt musst du dieser verwenden um den code lauffähig zu bekommen ... oder du schreibst den code soweit um das er SE-konform ist ...

aus erfahrung kenne ich die beiden genannten klassen nur aus reflection-codes die irgendwas mit classloadern zu tun haben ... vieles davon kann man auch anders lösen ...

ansonsten wäre es , um dir zu helfen , auch sinnvoll wenn du mal linkst was du nutzen willst ...

Ah ok. Am liebsten wäre es mir auf SE umzucoden. Für die Klasse
Java:
import sun.misc.URLClassPath;
hab ich den ersatz
Java:
import java.net.URLClassLoader;
gefunden. Ehrlich gesagt hab ich nichts kontrolliert aber nach der Namensänderung hatte ich für das Objekt keine Fehler mehr aber für die Klasse
Java:
import sun.misc.Resource;
hab ich nichts auf die schnelle gefunden. Da ich gleich zur arbeit muss poste ich mal die gesamte Klassendatei

Java:
import java.io.IOException;
import java.lang.reflect.Field;
import java.net.URL;
import java.net.URLClassLoader;
import java.net.URLStreamHandlerFactory;
import java.nio.ByteBuffer;
import java.security.CodeSource;
import java.security.cert.Certificate;
import java.util.jar.Manifest;
import java.util.logging.Logger;
import sun.misc.Resource;
import java.net.URLClassLoader;//import sun.misc.URLClassPath;

/**
 * This class loader disables sealed package checking and certificate
 * checking. It requires access to two restricted sun.* packages however.
 * 
 * @author sk89q
 */
@SuppressWarnings("restriction")
public class RogueClassLoader extends URLClassLoader {
    
    private static final Logger logger = Logger.getLogger(RogueClassLoader.class.getCanonicalName());
    private URLClassLoader urlClassPath;

    public RogueClassLoader(URL[] urls, ClassLoader parent,
            URLStreamHandlerFactory factory) {
        super(urls, parent, factory);
        install();
    }

    public RogueClassLoader(URL[] urls, ClassLoader parent) {
        super(urls, parent);
        install();
    }

    public RogueClassLoader(URL[] urls) {
        super(urls);
        install();
    }
    
    private void install()  {
        try {
            Field field = URLClassLoader.class.getDeclaredField("ucp");
            field.setAccessible(true);
            this.urlClassPath = (URLClassLoader) field.get(this);
            //field.set(this, new RogueURLClassPath(urlClassPath.getURLs()));
        } catch (SecurityException e) {
            throw new RuntimeException("Failed to find 'ucp'", e);
        } catch (NoSuchFieldException e) {
            throw new RuntimeException("Failed to find 'ucp'", e);
        } catch (IllegalArgumentException e) {
            throw new RuntimeException("Failed to find 'ucp'", e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException("Failed to find 'ucp'", e);
        }
    }

    @Override
    protected Class<?> findClass(final String name)
            throws ClassNotFoundException {
        String path = name.replace('.', '/').concat(".class");
        Resource res = urlClassPath.getResource(path, false);
        if (res != null) {
            try {
                return defineClass(name, res, true);
            } catch (IOException e) {
                throw new ClassNotFoundException(name, e);
            }
        } else {
            if (name.equals("BaseModMp")) {
                logger.info("(!!) Something requested ModLoaderMP, but you don't have it.");
            } else if (name.equals("BaseMod")) {
                logger.info("(!!) Something requested ModLoader, but you don't have it.");
            }
            throw new ClassNotFoundException(name);
        }
    }

    private Class<?> defineClass(String name, Resource res, boolean verify)
            throws IOException {
        int i = name.lastIndexOf('.');
        URL url = res.getCodeSourceURL();
        if (i != -1) {
            String pkgName = name.substring(0, i);
            Package pkg = getPackage(pkgName);
            Manifest manifest = res.getManifest();
            if (pkg == null) {
                if (manifest != null) {
                    definePackage(pkgName, manifest, url);
                } else {
                    definePackage(pkgName, null, null, null, null, null, null,
                            null);
                }
            }
        }
        ByteBuffer buffer = res.getByteBuffer();
        byte[] bytes = (buffer == null) ? res.getBytes() : null;
        CodeSource cs = new CodeSource(url, (Certificate[]) null);
        return (buffer != null ? defineClass(name, buffer, cs) : defineClass(name,
                bytes, 0, bytes.length, cs));
    }*/
    /*
    private class RogueURLClassPath extends URLClassPath {

        public RogueURLClassPath(URL[] urls, URLStreamHandlerFactory urlStreamHandlerFactory) {
            super(urls, urlStreamHandlerFactory);
        }

        public RogueURLClassPath(URL[] urls) {
            super(urls);
        }
        
        public Manifest getManifest() {
            return null;
            
        }
        
    }*/

}

Das ist die .java Datei nach der einen Änderung
 
T

tröööt

Gast
tja ... erfahrung zahlt sich aus ... wusste ich doch das es um classloader-manipulation geht ... dafür ist es mir einfach zu vertraut ...

auch war mir schon in zeile 18 klar worum es geht als ich den "namen" gelesen habe ... denn dieser ist in diesem umfeld einfach zu bekannt als das man es erst in zeile 71-74 rallt um was es hier eigentlich mal wieder geht ...

auch wenn ich es eigentlich aus prinzip ablehne HIER auf solche fragen zu antworten braucht man sich darüber das es einen solche code überhaupt gibt auch nicht zu wundern ...

wenn man halt bewusst das security-system von java aushebeln will muss man natürlich mit VM-abhängigen klassen arbeiten ... da führt kein weg dran vorbei ...

das sich eine IDE hier natürlich mit gewissen grundsätzen weigert ... eben weil man es NICHT machen sollte ... ist völlig verständlich und hier auch völlig korrekt ...
natürlich erzeugt der compiler selbst nur eine warning ... keinen error ... aber auch dieser weist darauf hin das man es nicht machen sollte ...

[ot]auch wenn ich keinen bock habe mich HIER mit minecraft zu befassen von mir ein rat : viele lehnen "sk89q" als mod-entwickler eben wegen solcher codes grundsätzlich ab ... auch ist es nicht mehr wirklich zeitgemäß nur direkt für ModLoader/MP zu arbeiten ...
konzentriere die dich lieber auf Forge ... denn das ist die zukunft der MC-modding-community[/ot]
 

AndyFFW

Mitglied
tja ... erfahrung zahlt sich aus ... wusste ich doch das es um classloader-manipulation geht ... dafür ist es mir einfach zu vertraut ...

auch war mir schon in zeile 18 klar worum es geht als ich den "namen" gelesen habe ... denn dieser ist in diesem umfeld einfach zu bekannt als das man es erst in zeile 71-74 rallt um was es hier eigentlich mal wieder geht ...

auch wenn ich es eigentlich aus prinzip ablehne HIER auf solche fragen zu antworten braucht man sich darüber das es einen solche code überhaupt gibt auch nicht zu wundern ...

wenn man halt bewusst das security-system von java aushebeln will muss man natürlich mit VM-abhängigen klassen arbeiten ... da führt kein weg dran vorbei ...

das sich eine IDE hier natürlich mit gewissen grundsätzen weigert ... eben weil man es NICHT machen sollte ... ist völlig verständlich und hier auch völlig korrekt ...
natürlich erzeugt der compiler selbst nur eine warning ... keinen error ... aber auch dieser weist darauf hin das man es nicht machen sollte ...

[ot]auch wenn ich keinen bock habe mich HIER mit minecraft zu befassen von mir ein rat : viele lehnen "sk89q" als mod-entwickler eben wegen solcher codes grundsätzlich ab ... auch ist es nicht mehr wirklich zeitgemäß nur direkt für ModLoader/MP zu arbeiten ...
konzentriere die dich lieber auf Forge ... denn das ist die zukunft der MC-modding-community[/ot]

Sehr Interessant. Die Sache zieht hier so weite Kreise das ich doch mal mein vorhaben bekannt gebe bevor mich noch iwer in irgendwelche dunklen ecken schiebt...

Ich will für unseren Server (Mod-Server) einen Launcher machen. Und das erste problem was sich auftat: Wie schreibt man den Login. Darum hab ich mir einen Quellcode eines OpenSource Launcher gedownloadet um mir einen solchen Login anzugucken. Da der Launcher noch weitere "Nice-Features" hat wollt ich den in Eclipse zum Laufen bringen um mir anzugucken wie was realisiert wurde. Die Klassenabhängigkeiten machen es natürlich sehr schwierig letzteres zu bewerkstelligen
 
T

tröööt

Gast
ich setzt das ganze lieber mal ein einen ot-spoiler ...
[ot]wenn es um das modding von minecraft geht muss meist eh "META-INF" gelöscht werden ... da package-sealing aber nur durch das manifest-attribut angegeben wird fällt es bei entfernen des manifestes eh weg ... wesshalb man keinen classloader-hack braucht ... was dann auch wieder konform mit der regel geht das man auf direkte zugriffe auf klassen in sun.* und com.sun.* verzichten sollte ...[/ot]
 

AndyFFW

Mitglied
ich setzt das ganze lieber mal ein einen ot-spoiler ...
[ot]wenn es um das modding von minecraft geht muss meist eh "META-INF" gelöscht werden ... da package-sealing aber nur durch das manifest-attribut angegeben wird fällt es bei entfernen des manifestes eh weg ... wesshalb man keinen classloader-hack braucht ... was dann auch wieder konform mit der regel geht das man auf direkte zugriffe auf klassen in sun.* und com.sun.* verzichten sollte ...[/ot]

Nein es geht nicht ums modifizieren von Minecraft sondern darum einen Launcher zu schreiben. Primär hab ich mir den Quellcode eines Launchers geholt um zu erfahren wie der Login geschrieben wird. Um den Launcher gut kapieren zu können will ich ihn in Eclipse lauffähig machen und am besten ohne fehler zu warnungen zu machen. Aber ich glaube das ist jetz die beste lösung
 
T

tröööt

Gast
naja ... aber wie gesagt : bewusst java-mechaniken aushebeln ist ein absolutes NO-GO ...
da solltest du lieber wirklich einfach das package-sealing des minecraft.jar entfernen ... deutlich einfacher und die ganze kiste ist geklärt ...
 
T

tröööt

Gast
kannst du ignorieren ... da ich nirgendswo package-sealing finde ... weder der launcher noch das eigentliche game ...

WRAUM dann also sk89q einen classlaoder schreibt der laut seiner doc das package-sealing umgehen soll weis ich nicht ... aber die meinung der community gegenüber diesem entwickler habe ich ja mal grob erwähnt ...

ich versteh das problem irgendwie immer noch nicht ...

du willst einen launcher schreiben ... dann guck dir an wie es andere machen und versuche bei solchen fehlern den code entsprechend umzuschreiben ...
 

AndyFFW

Mitglied
kannst du ignorieren ... da ich nirgendswo package-sealing finde ... weder der launcher noch das eigentliche game ...

WRAUM dann also sk89q einen classlaoder schreibt der laut seiner doc das package-sealing umgehen soll weis ich nicht ... aber die meinung der community gegenüber diesem entwickler habe ich ja mal grob erwähnt ...

ich versteh das problem irgendwie immer noch nicht ...

du willst einen launcher schreiben ... dann guck dir an wie es andere machen und versuche bei solchen fehlern den code entsprechend umzuschreiben ...

du willst einen launcher schreiben ... dann guck dir an wie es andere machen und versuche bei solchen fehlern den code entsprechend umzuschreiben ...

Genau das habe ich gemacht und genau deshalb kam ich auf das problem und genau deshalb ist dieser thread entstanden^^
aber ich habe meine vorgehensweise geändert und schreib komplett eigenen code da ich endlich auf informationen getroffen bin die ich benötigt habe. falls es jemanden interessiert: User:Oxguy3/Minecraft.net API - Minecraft Wiki

Dann noch ne andere frage zu dem thema: wie binde ich packages ein die nicht standardmäßig vorhanden sind? Die müssten ja in Java\lib\rt.jar reinkommen - bloß in welcher form? ordner mit enthaltenen klassen oder?
 
T

tröööt

Gast
HÄ ? was willst du mit "rt.jar" und extra packages ?

libs die du nutzen willst kommen in den classpath und gut is ... mehr dazu in der FAQ oder in der java-insel
 

AndyFFW

Mitglied
HÄ ? was willst du mit "rt.jar" und extra packages ?

libs die du nutzen willst kommen in den classpath und gut is ... mehr dazu in der FAQ oder in der java-insel

naja evtl erstellt man sich zB selber fertige klassen oder kriegt von woanders welche und man will sie nur mit import in seinem programm haben und die orginalen klassen liegen ja in der rt.jar - dort könnte man ja weitere hinzufügen
 
T

tröööt

Gast
naja evtl erstellt man sich zB selber fertige klassen oder kriegt von woanders welche und man will sie nur mit import in seinem programm haben und die orginalen klassen liegen ja in der rt.jar - dort könnte man ja weitere hinzufügen

NEIN ! dafür gibt es den CLASSPATH

Klassenpfad ? Wikipedia
http://en.wikipedia.org/wiki/Classpath_(Java)
PATH and CLASSPATH (The Java™ Tutorials > Essential Classes > The Platform Environment)
Java ClassPath
http://www.java-forum.org/einfuehru...umgebungsvariable-einstellen-windows-7-a.html

sowie : Let me google that for you

und ein ganz wichtiger tipp : FINGER WEG vom jdk/jre ordner .. damit kann man mehr kaputt machen als man denkt ... und das zu beheben ende bei den meisten in rätzel raten weil sie nicht klar ausdrücken können WAS sie getan haben ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Probleme beim ersten Netzwerkprogramm Netzwerkprogrammierung 3
Z Socket Probleme beim Senden und Empfangen Netzwerkprogrammierung 5
Z Probleme beim Senden von Nachrichten an den Server Netzwerkprogrammierung 9
C Socket Probleme beim Lesen und Schreiben aus/in einen Socket Netzwerkprogrammierung 2
P Probleme beim weiter senden von Datein Netzwerkprogrammierung 10
S Probleme beim senden von Daten per POST Methode an PHP Scrip Netzwerkprogrammierung 5
T RMI - Probleme beim Starten des Clients Netzwerkprogrammierung 4
G Probleme mit Firewall beim empfangen von dateien über socket Netzwerkprogrammierung 6
S Probleme beim Beschränken der Geschwindigkeit Netzwerkprogrammierung 6
M Probleme beim Abfangen von Streams Netzwerkprogrammierung 5
S Probleme bei Java-Installation auf Server (Linux/Shell/Terminal) Netzwerkprogrammierung 6
platofan23 Probleme mit Socket bei Android Studio? Netzwerkprogrammierung 22
J Probleme mit Multicast über IPv6, DatagramChannel Netzwerkprogrammierung 1
Niggo_ Probleme mit Java Mail Netzwerkprogrammierung 14
F Probleme mit Connection Reset bei Telnet Verbindung Netzwerkprogrammierung 1
K Probleme bei HTML-Mail-Abruf mit IMAP bei 1und1 Netzwerkprogrammierung 2
L Socket SSLServer Probleme Netzwerkprogrammierung 0
H Probleme mit UDP Netzwerkprogrammierung 0
F Server/Client Probleme Netzwerkprogrammierung 3
R Probleme mit JMS Netzwerkprogrammierung 1
M RMI RMI Probleme zwischen Client und Server Netzwerkprogrammierung 5
M Probleme mit FTP Netzwerkprogrammierung 19
windl URLConnection unter 1.7 macht Probleme Netzwerkprogrammierung 14
Maxim6394 Probleme bei Messenger Netzwerkprogrammierung 16
I Socket UDP Hole Punching bereitet Probleme Netzwerkprogrammierung 14
S HTTP Probleme mit POST-Befehl Netzwerkprogrammierung 2
R FTPS - Probleme mit FTPSClient Netzwerkprogrammierung 2
S Probleme mit XMLEncoder/XMLDecoder Netzwerkprogrammierung 2
D Server - Client Probleme Netzwerkprogrammierung 9
Weiti HTTP Zertifikat-Probleme - InstallCert.java Netzwerkprogrammierung 2
M Socket Probleme mit einfacher Socketverbindung Netzwerkprogrammierung 3
H Probleme mit GUI (RMI) Netzwerkprogrammierung 6
T RMI Probleme mit RMI-Server Netzwerkprogrammierung 4
J Probleme bei RSA mit byte[] bei Versand über RMI Netzwerkprogrammierung 2
T FTP Probleme mit Passiv und Binary Mode Netzwerkprogrammierung 3
J Probleme mit Threads (Client terminiert) Netzwerkprogrammierung 4
S Socket SocketServer und Client machen Probleme Netzwerkprogrammierung 6
B Server / Client Anwendung, Client GUI Probleme Netzwerkprogrammierung 11
F RMI probleme Netzwerkprogrammierung 3
D Probleme bei mehreren Clients uns Senden von Messages Netzwerkprogrammierung 16
E jPcap Probleme Netzwerkprogrammierung 3
B HTTP Probleme mit HttpClient? Netzwerkprogrammierung 2
T Probleme mit Jpcap Netzwerkprogrammierung 18
P Probleme mit OutputStream Netzwerkprogrammierung 7
B Probleme mit FTP verbindung Netzwerkprogrammierung 22
L Probleme bei Chatserver Netzwerkprogrammierung 6
A Probleme mit kleinem Netzwerk Programm Netzwerkprogrammierung 30
G Probleme mit SecruityManager + RMI Netzwerkprogrammierung 10
derMartin Probleme mit NNTP Client Netzwerkprogrammierung 2
A Probleme mit Citrix Netzwerkprogrammierung 17
A Probleme mit kleinem Messenger-Programm Netzwerkprogrammierung 4
K RXTXcomm : Install - Probleme Netzwerkprogrammierung 7
R Probleme mit UDP Netzwerkprogrammierung 4
P Probleme bei Chat programm Netzwerkprogrammierung 2
I Probleme mit 'JSSE Samples' von Sun Netzwerkprogrammierung 5
E InetAddress Klasse-Probleme Netzwerkprogrammierung 4
M dateien übertragen, probleme mit versch. Strömen? Netzwerkprogrammierung 4
R Rechte Probleme bei Applets Netzwerkprogrammierung 16
D EA-Exception Network Adapter macht probleme Netzwerkprogrammierung 2
P Probleme mit Input- / Output-Streams Netzwerkprogrammierung 2
V probleme mit dem chat programm Netzwerkprogrammierung 4
F WLAN Probleme (CLIENT-SERVER) Netzwerkprogrammierung 4
J Probleme mit ObjectOutputStream! Netzwerkprogrammierung 15
G Fragen/Probleme mit JavaMail Netzwerkprogrammierung 2
N Java-Chat (lauffähig) macht Probleme auf der Konsole Netzwerkprogrammierung 6
P Probleme mit einem Array aus Sockets Netzwerkprogrammierung 2
C Probleme bei Dateiupload mit socket Netzwerkprogrammierung 4
T FTP Chatprogramm probleme Netzwerkprogrammierung 2
C RMI Probleme mit iptables Netzwerkprogrammierung 2
D socket exception + timing probleme Netzwerkprogrammierung 2
G Probleme bei Proxy-Server! Netzwerkprogrammierung 5
S Probleme mit HttpURLConnection Netzwerkprogrammierung 10
D Habe 2 Probleme: Input eingabe und Multi Socket Server Netzwerkprogrammierung 2
OnDemand Json Objekt leeres Array beim lesen Netzwerkprogrammierung 9
T Brauche Hilfe beim GET-String für HttpURLConnection Netzwerkprogrammierung 4
A sporadischer Fehler beim Schreiben auf NAS Netzwerkprogrammierung 2
A Automatisches Update beim Starten Netzwerkprogrammierung 1
J Hilfe beim programmiern einer App zur Anmeldung im Wlan-Netzwerk Netzwerkprogrammierung 0
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
M Nur die erste Nachricht kommt beim Server an Netzwerkprogrammierung 11
M jsf-seite beim hinzufügen einer csv-datei in einen ordner aktualiseren Netzwerkprogrammierung 0
R Problem beim Programmieren eines Chatprogramms Netzwerkprogrammierung 5
S Umstellung AS400 auf Postgre - Problem beim Arbeiten mit Metadaten Netzwerkprogrammierung 2
S Seltsames Verhalten beim Empfangen von Daten über DataInputStream Netzwerkprogrammierung 12
G Socket NIO2 Problem mit AsynchronousSocketChannel beim Schließen Netzwerkprogrammierung 3
D RMI Problem beim shutdown von verteilter CORBA-Anwendung Netzwerkprogrammierung 6
S Socket Verschiedene Exceptions beim Übertragen von Bildern über Socket Netzwerkprogrammierung 20
C ObjectInputReader wirft beim zweiten Aufruf eine Exception Netzwerkprogrammierung 3
Y RMI Initialisierung beim Server Netzwerkprogrammierung 10
B Socket Aufhängen beim Lesen Netzwerkprogrammierung 4
M Problem beim Datenempfang Netzwerkprogrammierung 2
DEvent Keine IOException beim schreiben Socket Netzwerkprogrammierung 3
M Authentifizierung beim Start von Java-Applets Netzwerkprogrammierung 2
N NIO Problem beim speziellen Behandeln von einzelnen Benutzern Netzwerkprogrammierung 13
E HTTP Problem beim Auslesen von Websiten Netzwerkprogrammierung 6
G Kryptische Zeichen beim Auslesen einer Website Netzwerkprogrammierung 11
Y Problem mit ObjectInputStream beim lesen vom Socket Netzwerkprogrammierung 10
T ServerSocket bleibt beim lesen von Input hängen Netzwerkprogrammierung 2
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
clupus Exception beim Schließen eines Sockets Netzwerkprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben