ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
587
587
EMPFEHLEN
-
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
-
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
-
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.
-
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)
-
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
-
Programm stürzt beim Füllen von Vektoren mit vielen Werten ab
Von XELLEX im Forum C/C++Antworten: 9Letzter Beitrag: 19.06.10, 12:02 -
Programm stürzt ab (System.AccessViolationException:)
Von themonk im Forum C/C++Antworten: 6Letzter Beitrag: 24.09.09, 17:08 -
C Cleint Programm stürzt ohne Fehlermeldung ab
Von lolilol im Forum C/C++Antworten: 4Letzter Beitrag: 06.12.06, 13:08 -
Programm stürzt ab
Von Razorhawk im Forum C/C++Antworten: 8Letzter Beitrag: 30.09.05, 08:24 -
Programm stürzt immer ab!
Von Engfer im Forum Visual Basic 6.0Antworten: 5Letzter Beitrag: 20.08.04, 20:06





Zitieren
Login




