Java LWJGL显示屏一直闪烁

Java LWJGL显示屏一直闪烁,java,lwjgl,Java,Lwjgl,我最近开始使用LWJGL,我制作了显示器和一条简单的线,但这条线不断闪烁,我知道这可能是从 while(!Display.isCloseRequested()){ Display.update(); } 部分,以保持刷新,但如果我删除此部分并添加一个Display.update()排好线后,窗口打开一秒钟,然后关闭。以下是全部代码: package gaming; import org.lwjgl.LWJGLException; import org.lwjgl.opengl.Dis

我最近开始使用LWJGL,我制作了显示器和一条简单的线,但这条线不断闪烁,我知道这可能是从

while(!Display.isCloseRequested()){
    Display.update();
}
部分,以保持刷新,但如果我删除此部分并添加一个
Display.update()排好线后,窗口打开一秒钟,然后关闭。以下是全部代码:

package gaming;

import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;

public class game {

public static void setGL(){


    GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glLoadIdentity();
    GL11.glOrtho(0, Display.getWidth(), 0, Display.getHeight(), -1, 1);
    GL11.glMatrixMode(GL11.GL_MODELVIEW);

}

public game(int w, int h){

    try {
        Display.setDisplayMode(new DisplayMode(800, 600));
        Display.create();

        setGL();

        GL11.glColor3d(0.25, 0.75, 0.50);

        GL11.glClear( GL11.GL_COLOR_BUFFER_BIT );
        GL11.glBegin(GL11.GL_LINES);    
        GL11.glVertex2i(100, 100);
        GL11.glVertex2i(200, 200);          
        Display.update();
        GL11.glEnd();


        while(!Display.isCloseRequested()){


            Display.update();

        }
        while(Display.isCloseRequested()){
            Display.destroy();
            }



    } catch (LWJGLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


}


public static void main(String[] args) {

    new game(800, 600);

}
}

您必须在main方法中调用构造函数

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.Timer;

public class pro6 extends JFrame{
public  static Timer t;
public pro6() {
        System.out.println("heloo");

     t = new Timer(5000, new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
            JOptionPane.showMessageDialog(null, "This is a new Message.");
        }

    });
 t.start();


 setSize(new Dimension(200, 60));
 setDefaultCloseOperation(DISPOSE_ON_CLOSE);

}
    public static void main(String[] args) {
        // TODO Auto-generated method stub
       new pro6().setVisible(true);
    }}

使用ScheduledExecutorService如何:

import java.awt.*;
import java.util.concurrent.*;
import javax.swing.*;

public class pro7 {
  public static void main(String[] args) {
    final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
    scheduler.schedule(new Runnable() {
      @Override public void run() {
        EventQueue.invokeLater(new Runnable() {
          @Override public void run() {
            // TODO Auto-generated method stub
            JOptionPane.showMessageDialog(null, "This is a new Message.");
            scheduler.shutdown();
          }
        });
      }
    }, 5000, TimeUnit.MILLISECONDS);
  }
}

哈哈,这很管用,但是我所做的和这个有什么区别。在你的代码中没有构造函数,计时器没有从静态主方法运行是的,我意识到了这一点,但是为什么我必须添加构造函数,我可以添加常规方法吗?