Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    313

    [java]Significato eccezione java.lang.ClassCastException

    Cosa significa questa eccezione,generata da un cast??

    codice:
    java.lang.ClassCastException
    	at swingtest.MenuClass.actionPerformed(MenuClass.java:97)
    	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)
    	at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
    	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
    	at javax.swing.AbstractButton.doClick(AbstractButton.java:289)
    	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1113)
    	at javax.swing.plaf.basic.BasicMenuItemUI$MouseInputHandler.mouseReleased(BasicMenuItemUI.java:943)
    	at java.awt.Component.processMouseEvent(Component.java:5100)
    	at java.awt.Component.processEvent(Component.java:4897)
    	at java.awt.Container.processEvent(Container.java:1569)
    	at java.awt.Component.dispatchEventImpl(Component.java:3615)
    	at java.awt.Container.dispatchEventImpl(Container.java:1627)
    	at java.awt.Component.dispatchEvent(Component.java:3477)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
    	at java.awt.Container.dispatchEventImpl(Container.java:1613)
    	at java.awt.Window.dispatchEventImpl(Window.java:1606)
    	at java.awt.Component.dispatchEvent(Component.java:3477)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
    	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
     CODICE:
    
    public class MenuClass /*extends JDesktopPane*/ implements ActionListener{
       public JMenuBar barra = new JMenuBar();
       private JMenu file = new JMenu("File");
       private JMenu effect = new JMenu("Effect");
       private JMenuItem esci = new JMenuItem("Esci");
       private JMenuItem salva = new JMenuItem("Salva");
       private JMenuItem salvaas = new JMenuItem("Salva con nome");
       private JMenuItem apri = new JMenuItem("Apri");
       private JMenuItem inverti = new JMenuItem("Inverti");
       private JMenuItem luminosita = new JMenuItem("Luminosità");
       private JMenuItem contrasto = new JMenuItem("Contrasto");
    
       private JFileChooser aprifile = new JFileChooser();
       public JDesktopPane desktop = new JDesktopPane();
       public JFileChooser salvafile=new JFileChooser("C:\\Programmi");
       public JOptionPane pannellosalva = new JOptionPane();
       private JOptionPane pannello = new JOptionPane();
       public ImagePanel pannelloimmagine;
       public JInternalFrame finestra;
       public RenderedImage immagine;
       public JSlider sld;
       public JScrollPane srcimgpanel;
       public DisplayJAI srcimg;
       public OperationClass operazioni = new OperationClass();
    
    
    
    
       public MenuClass() {
         barra.add(file);
         barra.add(effect);
         file.add(apri);
         file.add(salva);
         file.add(salvaas);
         file.add(esci);
         effect.add(inverti);
         effect.add(luminosita);
         effect.add(contrasto);
         apri.addActionListener(this);
         salvaas.addActionListener(this);
         esci.addActionListener(this);
         inverti.addActionListener(this);
    
       }
    
       private String openFile(){
         aprifile.setDialogTitle("Scegli Immagine");
         aprifile.showOpenDialog (pannello);
         String fileName = new String(aprifile.getSelectedFile().toString());
         return fileName;
       }
    
       public void actionPerformed(ActionEvent ae) {
    
         if(ae.getSource() == esci){
           System.exit(0);
         }
         if(ae.getSource() == apri){
           String fileName =openFile();
           pannelloimmagine = new ImagePanel();
          finestra = pannelloimmagine.CreatePanel(fileName);
          desktop.add(finestra);
    
         }
         if(ae.getSource() == salvaas){
           try{
             salvafile.setDialogTitle("Inserisci percorso");
             salvafile.showSaveDialog(pannellosalva);
             String filesalvato = new String(salvafile.getSelectedFile().toString());
             JAI.create("filestore", immagine, filesalvato, "BMP", null);
           }
           catch(Exception a){
             System.out.println("Operazione annullata dall'utente");
           }
         }
        if(ae.getSource() == inverti){
          immagine = ((ImagePanel)desktop.getSelectedFrame()).getOriginalImage();
        if(immagine != null)  {
         srcimg = operazioni.Inverti(immagine);
         pannelloimmagine = new ImagePanel();
         finestra = pannelloimmagine.CreatePanel(srcimg);
         desktop.add(finestra);
    
           }
         else{ System.out.print("errorei invert");  }
    
         }
    
    
       }
    
    
    
     }
    
    
    public class ImagePanel extends JInternalFrame
               {
         public JInternalFrame finestra,pan;
         public JScrollPane srcimgpanel;
         public DisplayJAI srcimg;
         public RenderedImage imgsrc;
    
    
    
    
         public ImagePanel() {
    
    
         }
    
         public JInternalFrame CreatePanel(String fileName) {
         imgsrc = JAI.create("fileload", fileName);
         finestra = new JInternalFrame(fileName, true, true, true, true);
         finestra.setSize(640,480);
         srcimgpanel = new JScrollPane();
         srcimg = new DisplayJAI(imgsrc);
         srcimgpanel.getViewport().add(srcimg);
         setPreferredSize(new Dimension(640, 480));
         finestra.getContentPane().add(srcimgpanel);
         finestra.setVisible(true);
    
        return finestra;
       }
    
    
    
       public JInternalFrame CreatePanel(DisplayJAI immagine){
    
           finestra = new JInternalFrame("Immagine Modificata",true,true,true,true);
           finestra.setSize(640,480);
           srcimgpanel = new JScrollPane();
           srcimgpanel.getViewport().add(immagine);
           finestra.getContentPane().add(srcimgpanel);
           finestra.setVisible(true);
    
           return finestra;
         }
    
         public RenderedImage getOriginalImage() {
           return imgsrc;
         }
    
    
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Significa che stai tentadi di effettuare un cast di un oggetto in un altro a cui non è possibile castarlo... as esempio, se tenti di castare una String in un Integer, ecc.
    L'errore è in questa riga (almeno è l'unica che utilizza un cast):
    codice:
    immagine = ((ImagePanel)desktop.getSelectedFrame()).getOriginalImage());
    Penso che il metodo getSelectedFrame() non ritorni nu oggetto di tipo ImagePanel.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    313
    come devo fare per evitare l'eccezione?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    No... ho sbagliato... l'errore non è lì.
    Non credo che l'errore sia nel codice che tu hai postato... o almeno non lo posso correggere non conoscendo il resto del codice.
    Prova a vedere in che punto del codice ottieni l'errore (quando ottieni l'errore viene anche riportata la riga di codice che l'ha generata).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    313
    Come faccio a vedere in che punto è l'errore???Scustatemi ma sono alla prime armi

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Sotto all'errore java.lang.ClassCastException viene riportato il metodo actionPerformed() che indica la riga 97. Quella è la riga in cui si è generato l'errore. Ora, io ho provat a copiare il codice, ma non so da che riga tu abbia cominciato ne quanti spazi tu abbia tolto... fatto stà che la riga 97 non esiste all'interno della classe MenuClass. Devi vedere tu, sul tuo codice, all'interno della classe MenuClass qual è la riga 97.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    313
    ho fatto girare il programma e ho visto che l'eerore lo da in menucalss dove c'è il cast,cosa devo fare???

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Adesso ho capito... tu aggiungi all'oggetto desktop un oggetto di tipo JInternalFrame e tendi di recuperarlo castandolo a ImagePanel.
    Per fare ciò che vuoi fare tu dovresti far sì che il metodo CreatePanel() della classe ImagePanel tornasse un oggetto di tipo ImagePanel e non JInternalFrame... e per fare questo devi rivedere il codice al suo interno: tu al suo interno costruisci un JInternalFrame e lo restituisci.

    Vediamo quello che fai tu:
    codice:
    1) Costruisci un JInternalFrame chiamando il metodo CreatePanel()
    2) Lo aggiungi al desktop
    3) Prelevi dal desktop il JInternalFrame e tenti di castarlo a ImagePanel
    
    Quest'ultimo punto non puoi farlo!
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    313
    Come devo fare per eseguire questo cast???

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Vediamo, allora, di sistemare la classe ImagePanel:
    codice:
    public class ImagePanel extends JInternalFrame {
       public JInternalFrame finestra;
       public JScrollPane srcimgpanel;
       public DisplayJAI srcimg;
       public RenderedImage imgsrc;
    
       public ImagePanel(String fileName) {
          super(fileName, true, true, true, true);
          imgsrc = JAI.create("fileload", fileName);
          srcimgpanel = new JScrollPane();
          srcimg = new DisplayJAI(imgsrc);
          srcimgpanel.getViewport().add(srcimg);
          setPreferredSize(new Dimension(640, 480));
          setSize(640, 480);
          getContentPane().add(srcimgpanel);
          setVisible(true);
       }
    
       public ImagePanel(String fileName, DisplayJAI immagine) {
          super(fileName, true, true, true, true);
          srcimgpanel = new JScrollPane();
          srcimgpanel.getViewport().add(immagine);
          setSize(640, 480);
          getContentPane().add(srcimgpanel);
          setVisible(true);
       }
    
       public JInternalFrame CreatePanel(String fileName) {
          return new ImagePanel(fileName);
       }
    
       public JInternalFrame CreatePanel(DisplayJAI immagine){
          return new ImagePanel("Immagine Modificata", immagine);
       }
    
       public RenderedImage getOriginalImage() {
          return imgsrc;
       }
    }
    Così dovrebbe andare...

    Ora devi modificare la dichiarazione di finestra all'interno del programma principale: lo devi dichiarare di tipo ImagePanel e non JInternalFrame. Tutto dovrebbe andare.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.