Frage

Würde dagegen jemand einen Blick auf diesem Bit-Code mit und sehen, ob es ein Speicherleck in ihnen ist, ist es nicht übermäßig groß sein würde, aber mein Programm hält nach einer gewissen Zeit des Laufens abstürzt und ich weiß nicht, wie zu benutzen viualvm obwohl ich schon seit mehreren Tagen auf sie zu lesen und habe nicht die geringste Ahnung, was ich in dem Heapspeicherauszüge suchen und so weiter. danke für Ihre Hilfe, ps ich weiß, ich habe viel muchg Code geschrieben, aber ich weiß nicht, was sonst noch so zu tun, dass Sie hoffentlich sehen, wo das Problem für mich entsteht. Wenn es hilft, kann ich Ihnen das volle Programm per E-Mail an einen Blick zu nehmen. Vielen Dank für jede Hilfe geben kann.

  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;  
    }  


}

Ein weiterer Teil des Verfahrens

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();
    }



} 

der Teil, der überprüft, ob neue Bilder in die Datei aufgenommen werden

    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;
            }
        //  }
    }

}
War es hilfreich?

Lösung 2

es heute gelöst. Es stellte sich heraus, dass ich den Ball hielt die Bildtafeln aus dem alten Verfahren entfernen, aso, dass, wenn ich sie wurde Neulackierung Ich war über die alten Malerei und die alten waren noch da. Also brauchte ich nur in removeAll () für alle Platten hinzuzufügen, die aktualisiert wurden und das Programm lief gut ohne heapstack Fehler.

Andere Tipps

Sie können einen Speicher-Profiler versuchen, wie YourKit

Nun, Sie ein Array von 5000 Strings schaffen und beginnen die meisten von ihnen zu füllen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top