現在JavaでOpenGLを試しています。次のテストコードをNetBeans内で数サイクル実行すると、メモリ不足エラーが発生し、プログラムが終了します。問題は、いくつかの成功したサイクルでアプリケーションを実行した後、しばらくの間発生します。LWJGLベースのJavaアプリケーションを何度も実行するとNetBeansでメモリが不足するのはなぜですか?
なぜこれが起こり、どのように修正できますか?
コード:
package test3d;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.input.Keyboard;
class ColoredTriangle {
public void start() {
try {
Display.setFullscreen(true);
DisplayMode dm = new DisplayMode(34,34);
// Display.setDisplayMode(new DisplayMode(DisplayMode.get));
Display.create();
} catch (LWJGLException e) {
e.printStackTrace();
System.exit(0);
}
// Init OpenGL
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(-3, 3, -2.4, 2.4, -1, 1);
GL11.glRotatef(0.0f,5.0f,1.0f,0.0f);
//GL11.glOrtho(0, 640, 480, 0, 1, -1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
boolean quit = false;
while (!quit) {
// Clear the screen.
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
//GL11.glFrontFace(GL11.GL_CCW);
// Begin drawing
GL11.glBegin(GL11.GL_QUADS);
GL11.glColor3f(1.0f,0.0f,0.0f); //Red
/*
GL11.glVertex3f(0.0f,0.0f, 0.0f);
GL11.glVertex3f(0.0f,1.0f, 0.0f);
GL11.glVertex3f(1.0f,1.0f, 0.0f);
GL11.glVertex3f(1.0f,0.0f, 0.0f); //*/
GL11.glVertex3f(1.0f,0.0f, -1f);
GL11.glVertex3f(1.0f,1.0f, -1f);
GL11.glVertex3f(2.0f,1.0f, -1f);
GL11.glVertex3f(2.0f,0.0f, -1f);
GL11.glEnd();
Display.update();
if (Display.isCloseRequested() || Keyboard.isKeyDown(Keyboard.KEY_ESCAPE))
quit = true;
}
Display.destroy();
System.exit(0);
}
}
class Test3d
{
public static void main(String args[]) {
ColoredTriangle ct = new ColoredTriangle();
ct.start();
}
}
デバッガでプログラムを実行します。メモリ不足の例外が発生している行を正確に表示する必要があります。 –
は質問です:低メモリ状態でネットビーンがなぜ停止していますか? (そのための設定があります)。それとも質問です:なぜ大騒ぎのリークがありますか? (それははるかに面倒な質問です) –
@JoshDMプログラムは数回はうまく動作します。コードを変更するたびに、コードが動作しているかどうかを確認し、毎回「esc」を押してウィンドウを閉じます。同じ手順を何度か繰り返してメモリ例外が発生した場合 – varuog