Klasse aus String öffnen

Pommes9485

Bekanntes Mitglied
Guten Tag,

ich habe einen Daten Explorer geschrieben und möchte das man später noch selbstständig Klassen für bestimmte DateiTypen schreiben kann. Dazu habe ich eine Methode geschrieben, welche aus einer Text Datei die Endung und die dazugehörige Klasse ausliest und anschließend die Klasse auf dem Namen herausstartet. Soweit klappt auch alles, nur das ich beim starten eine InstantiationException bekomme. Diese wird wohl ausgegeben wenn man eine abstrakte Klasse oder ein Interface erstellt. Ich nehme an da ein jFrame auch ein Interface ist, das stimmt auch, da die zu erstellende Klasse ein solches ist. Aber wie kann ich ein Interface öffnen ?
Die genaue Meldung :
Code:
java.lang.InstantiationException: BilderStart
	at java.lang.Class.newInstance0(Class.java:357)
	at java.lang.Class.newInstance(Class.java:325)
	at JTableDemo$1.mouseClicked(JTableDemo.java:117)
	at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
	at java.awt.Component.processMouseEvent(Component.java:6507)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
	at java.awt.Component.processEvent(Component.java:6269)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4860)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4686)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2713)
	at java.awt.Component.dispatchEvent(Component.java:4686)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
	at java.awt.EventQueue.access$000(EventQueue.java:101)
	at java.awt.EventQueue$3.run(EventQueue.java:666)
	at java.awt.EventQueue$3.run(EventQueue.java:664)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:680)
	at java.awt.EventQueue$4.run(EventQueue.java:678)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
 
poste doch den Code von BilderStart?
mit einem Interface kannst du nichts sinnvolles anfangen, was würdest du denn machen wenn es instantiiert wäre?
es gibt nichts auszuführen

wie unter
InstantiationException (Java Platform SE 6)
steht kann es auch sein dass es keinen Default-Konstruktor in einer ansonsten fertigen Klasse gibt
 
Java:
/**
 * Write a description of class BilderStart here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class BilderStart
{
    
    public BilderStart(String pfad)
    {
        Bilder bild = new Bilder(pfad);
        
    }

    
}
Hatte gehofft es umgehen zu können ^^

Habe einen Fehler gefunden. Ich habe den String pfad nicht übergeben. Aber wo muss das rein ?
Bei dem cla.newInstance() ?

Bilder :
Java:
import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;

public class Bilder extends JFrame
{   
    boolean fenster =false;
    boolean plinks=false;
    boolean prechts = false;
    JLabel lab = new JLabel();
    JLabel leiste = new JLabel();
    JLabel pfeilL = new JLabel();
    JLabel pfeilR = new JLabel();
    String[] pfade;
    ImageIcon  bild; 
    int index = 0;
    ImageIcon fen = new ImageIcon( "fen.png" );
    ImageIcon lg = new ImageIcon("pfeil_links_glow.png");
    ImageIcon l = new ImageIcon("pfeil_links.png");
    ImageIcon rg = new ImageIcon("pfeil_rechts_glow.png");
    ImageIcon r = new ImageIcon("pfeil_rechts.png");
    int breite, hoehe;
    MouseListener mouseF = new MouseListener(){
            @Override
            public void mouseEntered(MouseEvent e){

            }


            @Override
            public void mouseExited(MouseEvent e) {
                    leiste.setVisible(false);
                    pfeilL.setVisible(!true);
                    pfeilR.setVisible(!true);
                    fenster = false;
            }
            public void mouseReleased(MouseEvent e){}
            public void mousePressed(MouseEvent e){}
            public void mouseClicked(MouseEvent e){
            if(e.getX() >pfeilL.getX() && e.getX() < pfeilL.getX()+pfeilL.getWidth() && e.getY()> pfeilL.getY() && e.getY()>pfeilL.getY()+ pfeilL.getHeight())
            {
            zurueck();
            
            }
             if(e.getX() >pfeilR.getX() && e.getX() < pfeilR.getX()+pfeilR.getWidth() && e.getY()> pfeilR.getY() && e.getY()>pfeilR.getY()+ pfeilR.getHeight())
            {
           vor();
            
            }
            }};
           
  
   
            
    MouseMotionListener motion = new MouseMotionListener(){

            public void mouseMoved(MouseEvent e) {
                if(e.getY()>hoehe-100 && e.getY()<hoehe && !fenster)
                {
                    leiste.setVisible(true);
                    pfeilL.setVisible(true);
                    pfeilR.setVisible(true);
                    fenster = true;
                }

                
                else if(e.getY()<hoehe-100 && e.getY()>0 && fenster || e.getX()>breite-1 || e.getX()<1)
                {
                   leiste.setVisible(false);
                   pfeilL.setVisible(!true);
                   pfeilR.setVisible(!true);
                   fenster = false;

                }

            }

            public void mouseDragged(MouseEvent e) {

            }
        };
    public Bilder(String[] pfad)
    {

        super("Bild");
        setSize(500,500);
         this.getContentPane().addComponentListener(new ComponentListener(){
 
           public void componentResized(ComponentEvent e)

    {
    
                  breite = getWidth();
                  hoehe = getHeight();
                   lab.setBounds(0,0,breite,hoehe);
                   System.out.println("Verändert");
    
    }

public void componentMoved(ComponentEvent e)

    {}

public void componentShown(ComponentEvent e)

    {}

public void componentHidden(ComponentEvent e)
            
           {}
                
                    
        });
        pfade = pfad.clone();
        gibPfade();
        breite = getWidth();
                  hoehe = getHeight();
      
        //Listener
        addMouseListener(mouseF);
        addMouseMotionListener(motion);
        
        // Bilder zuweisen
        bild = new ImageIcon(pfade[index]);
        //Labels anpassen
        leiste.setBounds(0,hoehe-100,breite,100);
        leiste.setIcon(fen);
        leiste.setVisible(false);
        lab.setHorizontalAlignment(SwingConstants.CENTER);
        lab.setIcon(bild);
        lab.setBounds(0,0,breite,hoehe);
        pfeilL.setIcon(l);
        pfeilL.setBounds(breite/4,hoehe-88,100,50);
        pfeilL.setVisible(false);
      
        pfeilR.setIcon(r);
        pfeilR.setBounds(breite/2+25,hoehe-88,100,50);
        pfeilR.setVisible(false);
     
        
        //Container
        Container pan = new Container();
        pan.add(lab);
        pan.add(leiste);
        pan.add(pfeilL,0);
        pan.add(pfeilR,0);
        // Frame anpassen
        setContentPane(pan);
        
        setVisible(true);

    }
    public Bilder(String pfad)
    {super("Bild");
        setSize(500,500);
     bild = new ImageIcon(pfad);
     lab.setHorizontalAlignment(SwingConstants.CENTER);
        lab.setIcon(bild);
        breite = 500;
        hoehe = 500;
        
        lab.setBounds(0,0,breite,hoehe);
         Container pan = new Container();
        pan.add(lab);
        setContentPane(pan);
        setVisible(true);
    }
    public void vor()
    {
    if(index==pfade.length-1)
    {
    index=0;
    bild = new ImageIcon(pfade[index]);
    lab.setIcon(bild); 
    }else
    {
    index++;
    bild = new ImageIcon(pfade[index]);
    lab.setIcon(bild); 
    }}
    public void zurueck()
    {
        if(index==0){
            index=pfade.length-1;
            bild = new ImageIcon(pfade[index]);
           lab.setIcon(bild); 
    

        }
        else
        {
        index-=1;
        bild = new ImageIcon(pfade[index]);
        lab.setIcon(bild);
        
        }
    }
    public void gibPfade()
    {
    for(int i= 0; i<pfade.length;i++)
    {
    System.out.println("Pfad " + pfade[i] );
    }
    
    }
}

Es soll also nur Bilder anzeigen...
Und das evtl. Pfeile anzeigen, aber dies ist nur beim start über einen anderen Weg möglich.
 
Zuletzt bearbeitet:
tja, es gibt nur eine BilderStart-Konstruktor mit String, auf andere Weise kann man derzeit kein BilderStart-Objekt erzeugen
 

Zurück
Oben