2014-02-18 43 views
1

我LWJGL近来开始,我做了展示和简单的线条,但此行持续闪烁和关闭我知道,可能是从的Java 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); 

} 
} 

回答

1

你必须调用构造函数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); 
    }} 
+0

笑的是工作,但有什么区别在我和这之间做了什么。 – user3314952

+0

在你的代码中没有构造函数和计时器没有从静态主方法运行 –

+0

是的,我意识到这一点,但为什么我必须添加一个构造函数,并且可以添加常规方法? – user3314952

0

如何使用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); 
    } 
}