Domanda

Qualcuno dispiacerebbe avere uno sguardo a questi pezzi di codice e vedere se v'è una perdita di memoria in loro, non sarà eccessivamente grande ma il mio programma continua a bloccarsi dopo un po 'di corsa e non so come utilizzare viualvm anche se ho letto su di esso per diversi giorni e non ho la minima idea di quello che sto cercando di morale heap e così via. Grazie per l'aiuto, ps So che hanno inviato lontano per muchg codice, ma io non so cosa altro fare in modo che si può vedere dove si spera si pone il problema per me. Se aiuta posso e-mail il programma completo per dare un'occhiata a. Grazie molto per tutto l'aiuto che si può dare.

  public class extraScreenPanel {

    static JPanel screenPanel = new JPanel(new BorderLayout()); 

    public static JPanel extraScreenPanel(int dispNum) 
    {
        JLabel label = new JLabel("" + dispNum + "");
        label.setPreferredSize(new Dimension(800, 600));
        label.setVerticalAlignment( SwingConstants.TOP );
        screenPanel = imgDisp(dispNum);
        label.setForeground(Color.white);
        label.setFont(new Font("Serif", Font.BOLD, 200));
        screenPanel.add(label, BorderLayout.PAGE_END );

        return screenPanel;
    }



    public static JPanel imgDisp(int picNum) {  
        String ref = "C:/PiPhotoPic/pic16.jpg";;
        BufferedImage loadImg = loadImage(ref);  
        JImagePanel panel = new JImagePanel(loadImg, 0, 0);  
        panel.setPreferredSize(new Dimension(800, 600));
        return panel;
    }  


    public static class JImagePanel extends JPanel{  
        private BufferedImage image;  
        int x, y;  
       public JImagePanel(BufferedImage image, int x, int y) {  
            super();  
            this.image = image;  
            this.x = x;  
            this.y = y;  
        }  
        @Override  
        protected void paintComponent(Graphics g) {  
           super.paintComponent(g);  
            g.drawImage(image, x, y, null);  
       }  
    }  


    public static BufferedImage loadImage(String ref) {  
            BufferedImage bimg = null;  
            try {  

              bimg = javax.imageio.ImageIO.read(new File(ref));  
         } catch (Exception e) {  
             e.printStackTrace();  
         } 
         BufferedImage bimg2 = resize(bimg,800,600);//set these to the resolution of extra screens
         return bimg2;  
     }  


     public static BufferedImage resize(BufferedImage img, int newW, int newH) {  
        int w = img.getWidth();  
        int h = img.getHeight();  
        BufferedImage dimg = dimg = new BufferedImage(newW, newH, img.getType());  
        Graphics2D g = dimg.createGraphics();  
        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);  
        g.drawImage(img, 0, 0, newW, newH, 0, 0, w, h, null);  
        g.dispose();  
        return dimg;  
    }  


}

Un'altra parte del metodo

public class piPhoto
{
    static int mostRecent = 0;
    static int dispNum = 0;
    static int lastDisp = 0;
    static JPanel picPanel = imgDisp.imgDisp(dispNum);
    static JFrame frame = new JFrame("Pi Photography");
    static JPanel cornerPanel = new JPanel();
    static JPanel bottomPanel = new JPanel();
    static JPanel menuPanel = new JPanel(new BorderLayout());
    static JPanel currentNumPanel = currentNumDisp.currentNumDisp(dispNum);
    static JPanel printPanel = printOptions.printOptions();
    static JPanel buttonPanel = updateButtonPanel.updateButtonPanel(mostRecent);
    static JPanel screen1Panel = new JPanel();
    static JPanel screen2Panel = new JPanel();
    static JPanel screen3Panel = new JPanel();
    static JPanel screen4Panel = new JPanel();
    static JPanel screenPanel12 = new JPanel(new BorderLayout());
    static JPanel screenPanel123 = new JPanel(new BorderLayout());
    static JPanel screenPanel1234 = new JPanel(new BorderLayout());
    static JPanel screensPanel = new JPanel(new BorderLayout());
    static JPanel deskScreen = new JPanel();
    static JPanel wholePanel = new JPanel(new BorderLayout());
    static JPanel wholePanel2 = new JPanel(new BorderLayout());




    public static void launchPiPhoto()
    {
        launchNC4.launch();

        bottomPanel.setPreferredSize(new Dimension(1440, 200));
        buttonPanel.setPreferredSize(new Dimension(1120, 200));
        cornerPanel.setPreferredSize(new Dimension(300,200));
        screen1Panel.setPreferredSize(new Dimension(800,600));
        screen2Panel.setPreferredSize(new Dimension(800,600));
        screen3Panel.setPreferredSize(new Dimension(800,600));
        screen4Panel.setPreferredSize(new Dimension(800,600));
        screensPanel.setPreferredSize(new Dimension(3200,600));
        deskScreen.setPreferredSize(new Dimension(800,600));
        wholePanel.setPreferredSize(new Dimension(4640,900));
        wholePanel2.setPreferredSize(new Dimension(5440,900));
        cornerPanel.setLayout(new BoxLayout(cornerPanel, BoxLayout.PAGE_AXIS));


        picPanel.setPreferredSize(new Dimension(1120, 620));


        //Menu Panel Set-up
        cornerPanel.add(currentNumPanel);
        bottomPanel.add(buttonPanel);
        bottomPanel.add(cornerPanel);
        menuPanel.setPreferredSize(new Dimension(1440, 840));
        menuPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
        menuPanel.add(bottomPanel, BorderLayout.PAGE_END);
        menuPanel.add(picPanel, BorderLayout.LINE_START);
        menuPanel.add(printPanel, BorderLayout.LINE_END);

        screen1Panel = extraScreenPanel.extraScreenPanel(piPhoto.mostRecent - 3);
        screen2Panel = extraScreenPanel.extraScreenPanel(piPhoto.mostRecent - 2);
        screen3Panel = extraScreenPanel.extraScreenPanel(piPhoto.mostRecent - 1);
        screen4Panel = extraScreenPanel.extraScreenPanel(piPhoto.mostRecent);
        screenPanel12.add(screen1Panel, BorderLayout.LINE_START);
        screenPanel12.add(screen2Panel, BorderLayout.LINE_END);
        screenPanel123.add(screenPanel12, BorderLayout.LINE_START);
        screenPanel123.add(screen3Panel, BorderLayout.LINE_END);
        screenPanel1234.add(screenPanel123, BorderLayout.LINE_START);
        screenPanel1234.add(screen4Panel, BorderLayout.LINE_END);
        screensPanel.add(screenPanel1234, BorderLayout.LINE_END);
        deskScreen = extraScreenPanel.extraScreenPanel(dispNum);

        wholePanel.add(menuPanel, BorderLayout.LINE_START);
        wholePanel.add(screensPanel, BorderLayout.LINE_END);
        wholePanel2.add(wholePanel, BorderLayout.LINE_START);
        wholePanel2.add(deskScreen, BorderLayout.LINE_END);

        frame.add(wholePanel2);

        //Frame set-up and Initializing
        JFrame.setDefaultLookAndFeelDecorated(true);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.pack();
        frame.setVisible(true);
        newImageRecieved.runCheck();
    }

    public static void repaintButtonPanel()
    {
        bottomPanel.removeAll();
        bottomPanel.setPreferredSize(new Dimension(1440, 200));
        buttonPanel = updateButtonPanel.updateButtonPanel(mostRecent);
        buttonPanel.setPreferredSize(new Dimension(1120, 200));
        cornerPanel.add(currentNumPanel);
        bottomPanel.add(buttonPanel);
        bottomPanel.add(cornerPanel);
        menuPanel.add(bottomPanel, BorderLayout.PAGE_END);
        frame.validate();
    }

        public static void repaintScreens()
    {
        wholePanel.remove(screensPanel);
        screen1Panel.removeAll();
        screen1Panel = extraScreenPanel.extraScreenPanel(piPhoto.mostRecent);
        screen2Panel.removeAll();
        screen2Panel = extraScreenPanel.extraScreenPanel(piPhoto.mostRecent - 1);
        screen3Panel.removeAll();
        screen3Panel = extraScreenPanel.extraScreenPanel(piPhoto.mostRecent - 2);
        screen4Panel.removeAll();
        screen4Panel = extraScreenPanel.extraScreenPanel(piPhoto.mostRecent - 3);
        screenPanel12.add(screen1Panel, BorderLayout.LINE_START);
        screenPanel12.add(screen2Panel, BorderLayout.LINE_END);
        screenPanel123.add(screenPanel12, BorderLayout.LINE_START);
        screenPanel123.add(screen3Panel, BorderLayout.LINE_END);
        screenPanel1234.add(screenPanel123, BorderLayout.LINE_START);
        screenPanel1234.add(screen4Panel, BorderLayout.LINE_END);
        screensPanel.add(screenPanel1234, BorderLayout.LINE_END);
        wholePanel.add(menuPanel, BorderLayout.LINE_START);
        wholePanel.add(screensPanel, BorderLayout.LINE_END);
        frame.validate();
    }



} 

la parte che controlla per vedere se le nuove immagini vengono aggiunte al file ancora

    public class newImageRecieved {
static int count = 0;

public static void runCheck()
{
     int delay = 500;
     ActionListener taskPerformer = new ActionListener() {
        public void actionPerformed(ActionEvent evt) {

            newImageRecieved(piPhoto.mostRecent+1);
        }
     };
     new Timer(delay, taskPerformer).start();
}

    public static void newImageRecieved(int picNum)
    {

            String url[] = new String[5000];
            String part1;
        url[0] = "C:/PiPhotoPic/pic16.jpg";
        for(Integer i=1;i<5000;i++){
            if(i<10){part1 = "C:/temp/new0000000";}
            else if(i<100){part1 = "C:/temp/new000000";}
            else if(i<1000){part1 = "C:/temp/new00000";}
            else {part1 = "C:/temp/new00000";}
            String num = Integer.toString(i);
            url[i]= part1 + num + ".jpg";
        }
        if(picNum<0){picNum=0;}
        String ref = url[picNum];
            piPhoto.frame.validate();
            boolean exists = (new File(ref)).exists();
            if(exists == true)
            {
                while (exists == true) 
                {
                    piPhoto.updateMostRecent(picNum);
                    ref = url[picNum + 1];
                    picNum = picNum + 1;
                    exists = (new File(ref)).exists();

                }

                piPhoto.updateMostRecent(picNum-1);
                piPhoto.repaintButtonPanel();
                piPhoto.repaintScreens();
                count=0;
            }
        //  }
    }

}
È stato utile?

Soluzione 2

risolto oggi. Mi risulta didnt rimuovere i pannelli di immagini dal vecchio metodo, Aso che, quando ero li riverniciatura stavo dipingendo sopra quelle vecchie e quelle vecchie erano ancora lì. Così ho solo bisogno di aggiungere in removeAll () per tutti i pannelli che sono stati fase di aggiornamento e il programma ha funzionato benissimo senza errori heapstack.

Altri suggerimenti

Si potrebbe provare un profiler di memoria come YourKit

Bene, si sta creando una matrice di 5000 stringhe e iniziare a riempire la maggior parte di loro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top