Zu den Aufzeichnungen der tutorials.de-Live-Workshops
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
587
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Blaze241 Blaze241 ist offline Grünschnabel
    Registriert seit
    Jul 2009
    Beiträge
    3
    Ich habe ein Problem mit einem Spiel das unsere Abschlussprojekt für dieses Schuljahr sein soll. Ich habe zwei klassen. in der ersten ist das fenster mit einemJLayeredPane und 5 JLabels. dort habe ich die steuerung über keylistener und das zeichnen von kleinen kugeln (im spiel sind das dann die schüsse) im zweiten programm habe ich dann die bewegung des gegners programmiert dabei soll das jlabel im ersten programm verändert werden. doch wenn ich das programm starte stürtzt es nach ein paar sekunden ab und ich bekomm diesen riesige fehlermeldung.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    
    Exception in thread "Thread-232" java.lang.OutOfMemoryError: Java heap space
        at com.sun.media.sound.SMFParser.readTrack(Unknown Source)
        at com.sun.media.sound.StandardMidiFileReader.getSequence(Unknown Source)
        at javax.sound.midi.MidiSystem.getSequence(Unknown Source)
        at com.sun.media.sound.JavaSoundAudioClip.createSequencer(Unknown Source)
        at com.sun.media.sound.JavaSoundAudioClip.<init>(Unknown Source)
        at sun.applet.AppletAudioClip.createAppletAudioClip(Unknown Source)
        at sun.applet.AppletAudioClip.<init>(Unknown Source)
        at java.applet.Applet.newAudioClip(Unknown Source)
        at Programme.Metroid.<init>(Metroid.java:50)
        at Programme.MetroidGegner.<init>(MetroidGegner.java:12)
        at Programme.Metroid.gegner(Metroid.java:224)
        at Programme.Metroid.run(Metroid.java:216)
        at java.lang.Thread.run(Unknown Source)
    Exception in thread "Thread-5" java.lang.OutOfMemoryError: Java heap space
        at java.util.Arrays.copyOf(Unknown Source)
        at java.util.Arrays.copyOf(Unknown Source)
        at java.util.ArrayList.ensureCapacity(Unknown Source)
        at java.util.ArrayList.add(Unknown Source)
        at javax.sound.midi.Track.add(Unknown Source)
        at com.sun.media.sound.SMFParser.readTrack(Unknown Source)
        at com.sun.media.sound.StandardMidiFileReader.getSequence(Unknown Source)
        at javax.sound.midi.MidiSystem.getSequence(Unknown Source)
        at com.sun.media.sound.JavaSoundAudioClip.createSequencer(Unknown Source)
        at com.sun.media.sound.JavaSoundAudioClip.<init>(Unknown Source)
        at sun.applet.AppletAudioClip.createAppletAudioClip(Unknown Source)
        at sun.applet.AppletAudioClip.<init>(Unknown Source)
        at java.applet.Applet.newAudioClip(Unknown Source)
        at Programme.Metroid.<init>(Metroid.java:50)
        at Programme.MetroidGegner.<init>(MetroidGegner.java:12)
        at Programme.Metroid.gegner(Metroid.java:224)
        at Programme.Metroid.run(Metroid.java:216)
        at java.lang.Thread.run(Unknown Source)
    #
    # An unexpected error has been detected by Java Runtime Environment:
    #
    #  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d48a38b, pid=1512, tid=704
    #
    # Java VM: Java HotSpot(TM) Client VM (10.0-b23 mixed mode, sharing windows-x86)
    # Problematic frame:
    # C  [jsound.dll+0xa38b]
    #
    # An error report file with more information is saved as:
    # C:\test_eclipse_eclipseuml\Eclipse 3.2\hs_err_pid1512.log
    #
    # If you would like to submit a bug report, please visit:
    #   [url]http://java.sun.com/webapps/bugreport/crash.jsp[/url]
    # The crash happened outside the Java Virtual Machine in native code.
    # See problematic frame for where to report the bug.
    #

    Ich hab mal hier die quelltexte der beiden klassen.

    1. Klasse
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    
    package Programme;
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import java.awt.*;
    import java.awt.event.*;
    import java.math.*;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Panel;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import javax.swing.ImageIcon;
    import javax.swing.JLayeredPane;
    import java.applet.AudioClip;
    import java.applet.Applet;
    import java.net.URL;
     
    public class Metroid extends JFrame implements ActionListener, KeyListener, Runnable
     
    {
        JLabel Metroid, Background, Samus, Lebenspunkte, Punkte;
        JLayeredPane jlp = new JLayeredPane();
        int r=0,l=0,o=0,m=0,e=99,p=0,x=249,y=122;
        boolean m1=true;
        MetroidGegner monster;
        
        public Metroid()
        {
            super("Metroid");
            addWindowListener(
                     new WindowAdapter() {
                        public void windowClosing(WindowEvent event)
                        {
                           System.exit(0);
                        }
                     }
            ); 
            
            try 
            {
               URL u = new URL("file:/C:/test_eclipse_eclipseuml/Eclipse 3.2/TGIEK 2008-2009/Programme/prologue.mid");
     
               AudioClip clip = Applet.newAudioClip(u);
               clip.loop();
            } 
            catch (Exception e) 
            {}
                
            Background = new JLabel();
            Background.setIcon(new ImageIcon("C:/test_eclipse_eclipseuml/Eclipse 3.2/TGIEK 2008-2009/Programme/Metroid Map.png"));
            Background.setBounds(0,0,512,193);
            Background.setVisible(true);
            
            Samus = new JLabel();
            Samus.setIcon(new ImageIcon("C:/test_eclipse_eclipseuml/Eclipse 3.2/TGIEK 2008-2009/Programme/Samus_Aran.png"));
            Samus.setBounds(249,122,21,38);
            Samus.setOpaque(true);
            Samus.setVisible(true);
            
            Metroid = new JLabel();
            Metroid.setIcon(new ImageIcon("C:/test_eclipse_eclipseuml/Eclipse 3.2/TGIEK 2008-2009/Programme/Metroid.png"));
            Metroid.setBounds(247,50,22,21);
            jlp.add(Metroid, 0);
            
            Lebenspunkte = new JLabel();
            Lebenspunkte.setText(Integer.toString (e));
            Lebenspunkte.setForeground(Color.white);
            Lebenspunkte.setBounds(460,150,50,50);
            
            Punkte = new JLabel();
            Punkte.setText( Integer.toString (p));
            Punkte.setForeground(Color.white);
            Punkte.setBounds(40,150,50,50);
            
            jlp.add(Background, 1);
            jlp.add(Samus, 0);
            jlp.add(Metroid, 0);
            jlp.add(Lebenspunkte, 0);
            jlp.add(Punkte, 0);
            this.add(jlp);
            addKeyListener(this);
        }
        
            
        public static void main(String[] args) 
        {
            Metroid Versuch = new Metroid();
            Versuch.setVisible(true);
            Versuch.setSize(520, 225);    
        }
     
        
        public void actionPerformed(ActionEvent e)
        {
            
        }
        public void keyPressed(KeyEvent e) 
        {
            if (e.getKeyCode() == KeyEvent.VK_UP)
            {
                r=0;
                l=0;
                o=1;
                Samus = new JLabel();
                Samus.setIcon(new ImageIcon("C:/test_eclipse_eclipseuml/Eclipse 3.2/TGIEK 2008-2009/Programme/Samus_Oben.png"));
                Samus.setBounds(249,122,21,38);
                Samus.setOpaque(true);
                Samus.setVisible(true);
                jlp.add(Samus, 0);
            }
            if (e.getKeyCode() == KeyEvent.VK_LEFT)
            {
                r=0;
                l=1;
                o=0;
                Samus = new JLabel();
                Samus.setIcon(new ImageIcon("C:/test_eclipse_eclipseuml/Eclipse 3.2/TGIEK 2008-2009/Programme/Samus_Links.png"));
                Samus.setBounds(249,122,21,38);
                Samus.setOpaque(true);
                Samus.setVisible(true);
                jlp.add(Samus, 0);
            }
            if (e.getKeyCode() == KeyEvent.VK_RIGHT)
            {
                r=1;
                l=0;
                o=0;
                Samus = new JLabel();
                Samus.setIcon(new ImageIcon("C:/test_eclipse_eclipseuml/Eclipse 3.2/TGIEK 2008-2009/Programme/Samus_Rechts.png"));
                Samus.setBounds(249,122,21,38);
                Samus.setOpaque(true);
                Samus.setVisible(true);
                jlp.add(Samus, 0);
            }
            if (e.getKeyCode() == KeyEvent.VK_SPACE)
            {
                if(r==1)
                {
                    r=2;
                    x=270;
                    y=135;
                }
     
                if(l==1)
                {
                    l=2;
                    x=245;
                    y=135;
                }
                if(o==1)
                {
                    o=2;
                    x=260;
                    y=117;
                }
                startanimation();
            }
        }
        public void keyReleased(KeyEvent e) 
        {
            if (e.getKeyCode() == KeyEvent.VK_UP)
            {
                r=0;
                l=0;
                o=0;
                Samus = new JLabel();
                Samus.setIcon(new ImageIcon("C:/test_eclipse_eclipseuml/Eclipse 3.2/TGIEK 2008-200/Programme/Samus_Aran.png"));
                Samus.setBounds(249,122,21,38);
                Samus.setOpaque(true);
                Samus.setVisible(true);
                jlp.add(Samus, 0);
            }
            if (e.getKeyCode() == KeyEvent.VK_RIGHT)
            {
                r=0;
                l=0;
                o=0;
                Samus = new JLabel();
                Samus.setIcon(new ImageIcon("C:/test_eclipse_eclipseuml/Eclipse 3.2/TGIEK 2008-2009/Programme/Samus_Aran.png"));
                Samus.setBounds(249,122,21,38);
                Samus.setOpaque(true);
                Samus.setVisible(true);
                jlp.add(Samus, 0);
            }
            if (e.getKeyCode() == KeyEvent.VK_LEFT)
            {
                r=0;
                l=0;
                o=0;
                Samus = new JLabel();
                Samus.setIcon(new ImageIcon("C:/test_eclipse_eclipseuml/Eclipse 3.2/TGIEK 2008-2009Programme/Samus_Aran.png"));
                Samus.setBounds(249,122,21,38);
                Samus.setOpaque(true);
                Samus.setVisible(true);
                jlp.add(Samus, 0);
            }
        }
        public void keyTyped(KeyEvent e) 
        {
     
        }
        public void startanimation()
        {
            Thread Grafik = new Thread(this);
            Grafik.start(); 
        }
        public void run()
        {
            gegner();
        }
        public void gegner()    
        {
            Graphics grafik = Background.getGraphics();
            
            while(m1==true)
            {
                monster = new MetroidGegner();
                monster.MetroidGegner();
                if(r==2)
                {
                    x++;
                    
                    grafik.setColor(new Color(0, 128, 128 ));
                    grafik.fillOval(x-1, y, 5, 5);
                    
                    grafik.setColor(Color.yellow);
                    grafik.fillOval(x, y, 5, 5);
                    
                    try {
                         Thread.sleep(10);
                      } catch (InterruptedException f) {
                      };
                }
                if(l==2)
                {
                    x--;
                    grafik.setColor(new Color(0, 128, 128 ));
                    grafik.fillOval(x+1, y, 5, 5);
                    
                    grafik.setColor(Color.yellow);
                    grafik.fillOval(x, y, 5, 5);
                    
                    try {
                         Thread.sleep(10);
                      } catch (InterruptedException f) {
                      };
                }
                if(o==2)
                {
                    y--;
                    grafik.setColor(new Color(0, 128, 128 ));
                    grafik.fillOval(x, y+1, 5, 5);
                    
                    grafik.setColor(Color.yellow);
                    grafik.fillOval(x, y, 5, 5);
                    
                    try {
                         Thread.sleep(10);
                      } catch (InterruptedException f) {
                      };
                }
            }
        }
    }

    2. Klasse
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    
    package Programme;
     
     
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.ImageIcon;
    import javax.swing.JLayeredPane;
     
    public class MetroidGegner extends JFrame implements Runnable
     
    {
        Metroid jlp = new Metroid();
        int m=0;
        boolean m1=true;
        Metroid Metroid=new Metroid();
        
     
        public void MetroidGegner()
        {
           startanimation2();
        }
     
        public void startanimation2()
        {
            Thread Grafik = new Thread();
            Grafik.start(); 
        }
        public void run()
        {
            gegner();
        }
        public void gegner()    
        {   
            while(m1==true)
            {
                if(m==0)
                {
                    Metroid.Metroid.setIcon(new ImageIcon("C:/test_eclipse_eclipseuml/Eclipse 3.2/TGIEK 2008-2009/Programme/Metroid.png"));
                    Metroid.Metroid.setBounds(247,50,22,21);
                    jlp.add(Metroid, 0);
                    try 
                    {
                        Thread.sleep(1000);
                    } 
                    catch (InterruptedException f) 
                    {
                    };
                    m=1;
                    Metroid.Metroid.setIcon(new ImageIcon("C:/test_eclipse_eclipseuml/Eclipse 3.2/TGIEK 2008-2009Programme/Metroiddelete.png"));
                    Metroid.Metroid.setBounds(247,50,22,21);
                    jlp.add(Metroid, 0);
                }
                
                if(m==1)
                {
                    Metroid.Metroid.setIcon(new ImageIcon("C:/test_eclipse_eclipseuml/Eclipse 3.2/TGIEK 2008-2009/Programme/Metroid.png"));
                    Metroid.Metroid.setBounds(135,130,22,21);
                    jlp.add(Metroid, 0);
                    try 
                    {
                        Thread.sleep(1000);
                    } 
                    catch (InterruptedException f) 
                    {
                    };
                    m=2;
                    Metroid.Metroid.setIcon(new ImageIcon("C:/test_eclipse_eclipseuml/Eclipse 3.2/TGIEK 2008-2009/Programme/Metroiddelete.png"));
                    Metroid.Metroid.setBounds(135,130,22,21);
                    jlp.add(Metroid, 0);
                }
                
                if(m==2)
                {
                    Metroid.Metroid.setIcon(new ImageIcon("C:/test_eclipse_eclipseuml/Eclipse 3.2/TGIEK 2008-200/Programme/Metroid.png"));
                    Metroid.Metroid.setBounds(353,130,22,21);
                    jlp.add(Metroid, 0);
                    this.add(jlp);
                    try 
                    {
                        Thread.sleep(1000);
                    } 
                    catch (InterruptedException f) 
                    {
                    };
                    m=0;
                    Metroid.Metroid.setIcon(new ImageIcon("C:/test_eclipse_eclipseuml/Eclipse 3.2/TGIEK 2008-2009/Programme/Metroiddelete.png"));
                    Metroid.Metroid.setBounds(353,130,22,21);
                    jlp.add(Metroid, 0);
                }
            }
        }
    }

    Bitte um hilfe bis dienstag muss ich fertig werden und bin hier schon am verzweifeln
    Geändert von Blaze241 (22.03.10 um 22:00 Uhr) Grund: Java-Code Tags
     

  2. #2
    RoCMe RoCMe ist offline Mitglied Gold
    Registriert seit
    Dec 2007
    Beiträge
    190
    Hallo!

    So wirst du hier sicherlich KEINE Hilfe bekommen! Wie du schon selbst gemerkt hast, ist die Fehlermeldung nicht gerade klein, und wenig Quellcode ist das auch nicht!

    Allgemein ist ein ein "OutOfMemoryError" nicht gut: Das bedeutet, dein Programm möchte mehr Speicher nutzen als ihm zugestanden wird!
    In den meisten Fällen tut das Programm nicht das, was es soll, sprich wenn du nicht gerade mit riesigen Datensätzen hantierst, dann deutet sowas auf einen Programmierfehler hin!

    Versuch mal, deinen Code mit "System.out.println()"-Aufrufen zu bestücken, um die Stelle zu finden, an der das Programm genau abstürzt.

    Gruß,

    RoCMe
     

  3. #3
    Blaze241 Blaze241 ist offline Grünschnabel
    Registriert seit
    Jul 2009
    Beiträge
    3
    Hallo,

    ich hab nochmals nachgeschaut und bemerkt das wenn ich diese zeilen in der ersten klasse in der whileschleife lösche, das programm wieder flüssig läuft. jedoch greift es dann nicht auf das zweite programm zu.

    monster = new MetroidGegner();
    monster.MetroidGegner();

    also muss da irgendeinproblem zwischen den zwei klassen geben.

    wegem dem outofmemory: ich habe ecplise mal 512mb speicher zugewiesen jedoch auch das selbe problem.
     

  4. #4
    Core-Dump Core-Dump ist offline Mitglied Bronze
    Registriert seit
    Feb 2009
    Beiträge
    39
    phhu also folgendes:
    - in deinem Beitrag verwendest du zitat statt code tags.
    - monster.MetroidGegner(); sieht schon mal ganz komisch aus.
    Denk dran, Klassen beginnen gross, Methoden Namen klein (ausser Konstruktoren).


    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    while (m1 == true) {
        monster = new MetroidGegner();
        monster.MetroidGegner();
        ....
        try {
            Thread.sleep(10);
        } catch (InterruptedException f) {
        }

    Überleg mal was der code teil macht.
    - wann wird m1 auf false gesetzt / wie lange läuft diese while schlaufe?
    - wie oft wird ein neuer MetroidGegner erstellt?
    - such mal nach 'java memory leak' das ist ein ganz wichtiges thema.

    nimm dir die Zeit und schau die folgenden Links durch:
    http://java.sun.com/docs/codeconv/ht...nvTOC.doc.html
    (z.B. http://java.sun.com/docs/codeconv/ht....doc5.html#381)
     

  5. #5
    Blaze241 Blaze241 ist offline Grünschnabel
    Registriert seit
    Jul 2009
    Beiträge
    3
    oh man bin ich blöd danke.
    nur hab ich jetzt ein anderes (aber deutlich kleineren fehler) ich bekomme nämlich java.lang.NullPointerException in den zeilen:

    jlp.add(Background, 1);
    Metroid Versuch = new Metroid();

    nur versteh ich nicht wieso. weder jlp noch Metroid sind null.
     

Ähnliche Themen

  1. Antworten: 9
    Letzter Beitrag: 19.06.10, 12:02
  2. Antworten: 6
    Letzter Beitrag: 24.09.09, 17:08
  3. Antworten: 4
    Letzter Beitrag: 06.12.06, 13:08
  4. Programm stürzt ab
    Von Razorhawk im Forum C/C++
    Antworten: 8
    Letzter Beitrag: 30.09.05, 08:24
  5. Programm stürzt immer ab!
    Von Engfer im Forum Visual Basic 6.0
    Antworten: 5
    Letzter Beitrag: 20.08.04, 20:06