JOGL - Kugel wird nicht gezeichnet

Fesker

Mitglied
Hallo liebe Leute, ich spiele immer noch mit meinen Zufallsgenerierten Sonnensystemen und LinkedLists herum, nun möchte ich die generierten Systeme in einem OpenGL-JInternalFrame anzeigen lassen.
Das Fenster funktioniert, kann drin zeichnen, nun stoße ich auf folgendes Problem.

Ich will die ganzen Methoden ja möglichst klein halten um Übersicht zu schaffen und mit dieser Methode hier die Planeten (später) an ihre jeweiligen Positionen bringen.
Um das zu schaffen, hat jedes Planetenobjekt eigene Positions- und Geschwindigkeitswerte etc, die ich hier mit einbauen muss. Aber WENN ich diese nun hier in dieser Methode die ganzen int, doubles etc. definiere/abrufe, dann wird meine Kugel nicht gezeichnet, stattdessen bleibt ein weißes Fenster übrig.
Lösche ich sie, wird die Kugel ganz normal dargestellt. warum?

Java:
private void DrawPlanet(GLAutoDrawable drawable) {	    	
	        GL2 gl = drawable.getGL().getGL2();
	        int     selectedSystem	  = MainWindow.this.sysList.getSelectedIndex();
	   	int  	selectedPlanet    = MainWindow.this.planetList.getSelectedIndex();
	   	Planet p = systems.get(selectedSystem).getPlanet(selectedPlanet);
	   	int    distance = p.getDistance();
	   	float  speed 	= p.getSpeed();
	        double xPos     = p.getXPos();
	        double yPos     = p.getYPos();
	        double zPos     = p.getZPos();
	        double xAngle   = p.getXAngle();
	        double yAngle   = p.getYAngle();
	        double zAngle   = p.getZAngle();
	        
	   		gl.glMatrixMode(gl.GL_MODELVIEW);
	        gl.glLoadIdentity();
	        
	    	 // Set material properties.
            float[] rgba = {0.3f, 0.5f, 1f};
            gl.glMaterialfv(GL.GL_FRONT, gl.GL_AMBIENT, rgba, 0);
            gl.glMaterialfv(GL.GL_FRONT, gl.GL_SPECULAR, rgba, 0);
            gl.glMaterialf(GL.GL_FRONT, gl.GL_SHININESS, 0.5f);
            gl.glColor3f(0.3f, 0.5f, 1f); 
            
            
	        // Draw sphere	        
	         /*xAngle = (xAngle + 1f) % 360;
	         zAngle = (zAngle + 1f) % 360;
	         xPos = Math.sin(Math.toRadians(xAngle))*distance;
	         zPos = Math.cos(Math.toRadians(zAngle))*distance;*/
	         
	        //gl.glTranslatef(0.0f, 10f, 0.0f); // Translate object
	        
	        GLUquadric earth = glu.gluNewQuadric();
	        glu.gluQuadricDrawStyle(earth, GLU.GLU_LINE);
	        glu.gluQuadricNormals(earth, GLU.GLU_FLAT);
	        glu.gluQuadricOrientation(earth, GLU.GLU_OUTSIDE);
	        final float radius = 6.345f;
	        final int slices = 64;
	        final int stacks = 64;
	        glu.gluSphere(earth, radius, slices, stacks);	       
	        glu.gluDeleteQuadric(earth);
	    }
Ich kann die Variablen auch nicht woanders hin verschieben, weil das GLWindow vor dem MainWindow, in dem es sich dann eigentlich befindet, geladen wird und ich dann einen Error bekomme, dass die "Syslist" ja noch gar nicht existiert...

Beste Grüße!
 
Zuletzt bearbeitet:

Fesker

Mitglied
Da nun doch schon einige Leute hier reingeschaut haben und nichts zu berichten wissen, hänge ich einfach mal meine Codes an, vielleicht hilft euch das weiter.. ich seh den Wald vor lauter Bäumen grad nicht mehr... :noe:

Wie gesagt, lösche ich den Teil mit
Java:
int     selectedSystem	  = MainWindow.this.sysList.getSelectedIndex();
	   		int  	selectedPlanet    = MainWindow.this.planetList.getSelectedIndex();
	   		Planet p = systems.get(selectedSystem).getPlanet(selectedPlanet);
	   		int    distance = p.getDistance();
	   		float  speed 	= p.getSpeed();
	        double xPos     = p.getXPos();
	        double yPos     = p.getYPos();
	        double zPos     = p.getZPos();
	        double xAngle   = p.getXAngle();
	        double yAngle   = p.getYAngle();
	        double zAngle   = p.getZAngle();
aus der DrawPlanet Methode, dann wird die Kugel gezeichnet... der Grund dafür ist mir nur nicht klar.
Bin auch für sonstige Vorschläge offen, wie man den Code besser gestalten könnte :popcorn:

MainWindow.java:
Java:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
import javax.media.opengl.GL;
import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JDesktopPane;
import javax.swing.JInternalFrame;
import javax.swing.ListSelectionModel;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.ScrollPane;
import java.awt.SystemColor;
import javax.swing.JEditorPane;
import com.jogamp.opengl.util.FPSAnimator;
import javax.media.opengl.awt.GLCanvas;
import javax.media.opengl.glu.*;

import java.awt.Font;


final public class MainWindow extends JFrame {
	
	final class GLWindow implements GLEventListener {

		
	    double cameraDistance = 100;
	    double cameraAngle = 0;
	    double cameraFocusX, cameraFocusY, cameraFocusZ;
	    double cameraX, cameraY, cameraZ;
	    
	    
	    
	    GLU glu = new GLU();
	    
	    public void GLMain() {
	    	 GLProfile glp = GLProfile.getDefault();
	         GLCapabilities caps = new GLCapabilities(glp);
	         GLCanvas canvas = new GLCanvas(caps);
	        
	        final JInternalFrame JOGLFrame = new JInternalFrame("JOGLI");
			JOGLFrame.setBounds(0, 265, 359, 266);
			JOGLFrame.add(canvas);
			JOGLFrame.setResizable(true);
			MainWindow.this.desktopPane.add(JOGLFrame);			
			JOGLFrame.setVisible(true);
				
	        canvas.addGLEventListener(new GLWindow());

	        FPSAnimator animator = new FPSAnimator(canvas,60);
	        animator.start();
	    }

	    @Override
	    public void display(GLAutoDrawable drawable) {
	        update(drawable);
	        render(drawable);
	    }

	    @Override
	    public void dispose(GLAutoDrawable drawable) {
	    }

	    @Override
	    public void init(GLAutoDrawable drawable) {
	    	GL2 gl = drawable.getGL().getGL2();
	    	
	        // Global settings.
	        gl.glShadeModel(gl.GL_SMOOTH);
	        gl.glHint(gl.GL_PERSPECTIVE_CORRECTION_HINT, gl.GL_NICEST);
	        gl.glClearColor(0f, 0f, 0f, 1f);
	        
	    	    	
	    	setCamera(drawable, gl, glu, 10,0,10,0,0,0);
	    }

	    @Override
	    public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) {
	    }

	    private void update(GLAutoDrawable drawable) {
	    	 
	    	double theta = 0;
		    double x = 0;
		    double y = 0;
		    double z = 0;
	    	GL2 gl = drawable.getGL().getGL2();
	        theta = 1;


	         /*Kameraposition kreisen lassen
	         cameraAngle = (cameraAngle + 1f) % 360;
	         x = Math.sin(Math.toRadians(cameraAngle))*cameraDistance;
	         z = Math.cos(Math.toRadians(cameraAngle))*cameraDistance;
	         System.out.println(z);
	         y = 0;
	        	        		
	        setCamera(drawable, gl, glu, x,0, z,0,0,0); */
	    }
	    
	    private void setCamera(GLAutoDrawable drawable, GL2 gl, GLU glu, double cameraX, double cameraY, double cameraZ, double cameraFocusX, double cameraFocusY, double cameraFocusZ) {
	    	
	    	gl = drawable.getGL().getGL2();
	    	
	    	gl.glMatrixMode(gl.GL_PROJECTION);
	        gl.glLoadIdentity();
	        
	        // Perspective.
	        float widthHeightRatio = (float) getWidth() / (float) getHeight();
	        glu.gluPerspective(45, widthHeightRatio, 1, 10000);
	        glu.gluLookAt(cameraX, cameraY, cameraZ, 0, 0, 0, 0, 1, 0); // distance, x,y,z
	        
	     // Change back to model view matrix.
	        gl.glMatrixMode(gl.GL_MODELVIEW);
	        gl.glLoadIdentity();

	    }
	    
	    private void DrawPlanet(GLAutoDrawable drawable) {	    	
	        GL2 gl = drawable.getGL().getGL2();
	        int     selectedSystem	  = MainWindow.this.sysList.getSelectedIndex();
	   		int  	selectedPlanet    = MainWindow.this.planetList.getSelectedIndex();
	   		Planet p = systems.get(selectedSystem).getPlanet(selectedPlanet);
	   		int    distance = p.getDistance();
	   		float  speed 	= p.getSpeed();
	        double xPos     = p.getXPos();
	        double yPos     = p.getYPos();
	        double zPos     = p.getZPos();
	        double xAngle   = p.getXAngle();
	        double yAngle   = p.getYAngle();
	        double zAngle   = p.getZAngle();
	        
	   		gl.glMatrixMode(gl.GL_MODELVIEW);
	        gl.glLoadIdentity();
	        
	    	 // Set material properties.
            float[] rgba = {0.3f, 0.5f, 1f};
            gl.glMaterialfv(GL.GL_FRONT, gl.GL_AMBIENT, rgba, 0);
            gl.glMaterialfv(GL.GL_FRONT, gl.GL_SPECULAR, rgba, 0);
            gl.glMaterialf(GL.GL_FRONT, gl.GL_SHININESS, 0.5f);
            gl.glColor3f(0.3f, 0.5f, 1f); 
            
            
	        // Draw sphere	        
	         /*xAngle = (xAngle + 1f) % 360;
	         zAngle = (zAngle + 1f) % 360;
	         xPos = Math.sin(Math.toRadians(xAngle))*distance;
	         zPos = Math.cos(Math.toRadians(zAngle))*distance;*/
	         
	        //gl.glTranslatef(0.0f, (float)yPos, (float)zPos); // Translate our object along the y axis  
	        
	        GLUquadric earth = glu.gluNewQuadric();
	        glu.gluQuadricDrawStyle(earth, GLU.GLU_LINE);
	        glu.gluQuadricNormals(earth, GLU.GLU_FLAT);
	        glu.gluQuadricOrientation(earth, GLU.GLU_OUTSIDE);
	        final float radius = 6.345f;
	        final int slices = 64;
	        final int stacks = 64;
	        glu.gluSphere(earth, radius, slices, stacks);	       
	        glu.gluDeleteQuadric(earth);
	    }
	    
	    private void RenderSolarSystem(GLAutoDrawable drawable){
	    	 GL2 gl = drawable.getGL().getGL2();
	    	
	    	     	    
	    	 // Prepare light parameters.
	            float SHINE_ALL_DIRECTIONS = 1;
	            float[] lightPos = {-30, 0, 0, SHINE_ALL_DIRECTIONS};
	            float[] lightColorAmbient = {0.2f, 0.2f, 0.2f, 1f};
	            float[] lightColorSpecular = {0.8f, 0.8f, 0.8f, 1f};

	            // Set light parameters.
	            gl.glLightfv(gl.GL_LIGHT1, gl.GL_POSITION, lightPos, 0);
	            gl.glLightfv(gl.GL_LIGHT1, gl.GL_AMBIENT, lightColorAmbient, 0);
	            gl.glLightfv(gl.GL_LIGHT1, gl.GL_SPECULAR, lightColorSpecular, 0);

	            // Enable lighting in GL.
	            gl.glEnable(gl.GL_LIGHT1);
	            gl.glEnable(gl.GL_LIGHTING);

	            DrawPlanet(drawable);
		        
		        
	    }

	    private void render(GLAutoDrawable drawable) {
	        GL2 gl = drawable.getGL().getGL2();
	        gl.glClear(GL.GL_COLOR_BUFFER_BIT);
	        
	        RenderSolarSystem(drawable);
	    }
	}
	
	private JPanel contentPane;
	final List<SolarSystem> systems = new LinkedList<SolarSystem>();
	final DefaultListModel systemListModel = new DefaultListModel();
	final DefaultListModel planetListModel = new DefaultListModel();
	final JList planetList = new JList(planetListModel);
	final JList sysList    = new JList(systemListModel);
	final JEditorPane PlanetDetailTextPane = new JEditorPane();
	
	final JDesktopPane desktopPane = new JDesktopPane();
	
	
	final int getSysListSelectedIndex(){
		return sysList.getSelectedIndex();
	}
	
	// Systeme & Planeten generieren
	public void GenerateSystems(){
		
		Random iRandom = new Random();
    	for (int i=0;i<10;i++){
    	systems.add(new SolarSystem(iRandom.nextInt(10)));
    		
    			for (int z=0; z<iRandom.nextInt(15);z++)
    			{
    				systems.get(i).addPlanet(new Planet(systems.get(i)));
    				Planet p = systems.get(i).getPlanet(z);
    				System.out.println(p.getName() 
    						+ ", mass: " + p.getMass() 
    						//+ ", type: " + p.getType() 
    						+ ", distance: " + p.getDistance()
    						);
    			    //planetListModel.addElement(galaxy.get(i).getPlanet(z).getName());
    			}	
    		System.out.println(systems.get(i).getPlanetCount());
    		systemListModel.addElement(systems.get(i).getName());
    	}
	}
	
	public void UpdatePlanetFrame(){
		 int	selected    = sysList.getSelectedIndex();
		 int 	planetCount = systems.get(selected).getPlanetCount();
		 
		 planetListModel.clear();
		 
		 if (planetCount == 0) {
			 planetListModel.addElement("Leeres System");
		 }				 
		 else {	
			 	for (int i=0; i<planetCount;i++){
			 		String planetName  = systems.get(selected).getPlanet(i).getName();
			 		String planetType     = Snippets.PlanetTypeToString(systems.get(selected).getPlanet(i).getType());
			 		planetListModel.addElement(planetName +" - ["+planetType+"]");												    	
			 	}
		 }
	}
	
	public void UpdatePlanetDetailWindow(){

		 int    selectedSystem	  = sysList.getSelectedIndex();
		 int	selectedPlanet    = planetList.getSelectedIndex();		 
		 int 	planetCount 	  = systems.get(selectedSystem).getPlanetCount();
		 String fontFace1  		  = "Verdana";
		 int	fontSize 		  = 3;
		 
		 if (planetCount == 0) {
			 PlanetDetailTextPane.setText("Keine Planeten in diesem System!");
			 
		 } 
		 else {
		 Planet p                 = systems.get(selectedSystem).getPlanet(selectedPlanet);
		 PlanetDetailTextPane.setText("");
		 PlanetDetailTextPane.setText(""
		 		+ "<font face=\""+fontFace1+"\" size="+fontSize+"\">"
		 		+ p.getName() 
		 		+ "<br>"+"Typ: " + Snippets.PlanetTypeToString(p.getType())
		 		+ "<br>"+"Masse: " + p.getMass() 
		 		+ "<br>"+"Entfernung zur Sonne: " + p.getDistance() + " AU"
		 		+ "<br>Temperaturen: " + p.getMinTemp()+"°C bis "+p.getMaxTemp()+"°C "+"Ø"+p.getAvgTemp()+"°C"
		 		+ "<br>Test: get HabitableZone: "+ systems.get(selectedSystem).getHabitableZone()
		 		+ "<br>Test: get Type2: "
		 		+ ""
		 		+ "</font>");
		 }
	}
	
 	public MainWindow() {
		    	
    	sysList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 1021, 653);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
				
		desktopPane.setBackground(SystemColor.menu);
		contentPane.add(desktopPane);
		
		JInternalFrame SystemFrame = new JInternalFrame("Bekannte Systeme");
		SystemFrame.setIconifiable(true);
		SystemFrame.setResizable(true);
		SystemFrame.setClosable(true);
		SystemFrame.setBounds(0, 0, 163, 254);
		desktopPane.add(SystemFrame);
		
		JInternalFrame PlanetFrame = new JInternalFrame("Enthaltene Planeten");
		PlanetFrame.setResizable(true);
		PlanetFrame.setIconifiable(true);
		PlanetFrame.setClosable(true);
		PlanetFrame.setLocation(173, 0);
		PlanetFrame.setSize(175, 254);
		desktopPane.add(PlanetFrame);
		
		JInternalFrame PlanetDetailFrame = new JInternalFrame("Details");
		PlanetDetailFrame.setClosable(true);
		PlanetDetailFrame.setResizable(true);
		PlanetDetailFrame.setIconifiable(true);
		PlanetDetailFrame.setBounds(358, 0, 235, 254);
		desktopPane.add(PlanetDetailFrame);
		
  
  		PlanetDetailTextPane.setEditable(false);
  		PlanetDetailTextPane.setFont(new Font("Tahoma", Font.PLAIN, 11));
  		PlanetDetailTextPane.setContentType("text/html");
		PlanetDetailFrame.getContentPane().add(PlanetDetailTextPane, BorderLayout.CENTER);
		PlanetDetailFrame.setVisible(true);
		
				
		sysList.addMouseListener(new MouseAdapter() { // Systemliste angeklickt
			@Override
			public void mousePressed(MouseEvent arg0) {
				UpdatePlanetFrame();
			}
		});
		
		planetList.addMouseListener(new MouseAdapter() { // PLanetList angeklickt
    		@Override
    		public void mousePressed(MouseEvent arg0) { 			
    			UpdatePlanetDetailWindow(); 
    		}
    	});
		
			
		ScrollPane planetScrollPane = new ScrollPane();
		ScrollPane systemScrollPane = new ScrollPane();
		PlanetFrame.getContentPane().add(planetScrollPane, BorderLayout.CENTER);
		planetScrollPane.add(planetList);		
		SystemFrame.getContentPane().add(systemScrollPane, BorderLayout.CENTER);
		systemScrollPane.add(sysList);
					
		SystemFrame.show();
		PlanetFrame.show();
		
		GenerateSystems();
		
		GLWindow glw = new GLWindow();
		glw.GLMain();

 	}   
	
	
 	
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					MainWindow mFrame = new MainWindow();
					mFrame.setVisible(true);
					
										
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
}
Planet.java:
Java:
import java.util.*;
public class Planet {
	
	private Integer type,             // RandomNumber, converted later into "Terran", Water, Gas....
	                distance,         // DistanceToSun (radius)
	                minTemp, 
	                maxTemp, 
	                avgTemp;      // Average temperature based on Distance and PlanetType
	
	private double xPos, xAngle,
				   yPos, yAngle,
				   zPos, zAngle;
	private float  speed;          // Speed for circling around sun
	        
	private String  name;     
	
	private SolarSystem solarSystem;
	private MainWindow mw;
    private final double mass;
	     
    // construct a new planet with given attributes
    public Planet(SolarSystem solarSystem) {
    	Random random = new Random();
    	
        this.solarSystem = solarSystem; // SystemIndex where the planet is in. 
        this.name     	 = GenerateName();
        this.mass  		 = random.nextDouble();
		this.distance    = GenerateDistance();
		this.type        = GenerateType();
		this.minTemp     = GenerateMinTemp();
		this.maxTemp     = GenerateMaxTemp();
		this.avgTemp	 = (this.minTemp + this.maxTemp)/2;
	 }
    
    public double getXPos    ()  {return xPos;}    
    public double getXAngle  ()  {return xAngle;}
    public double getYPos    ()  {return yPos;}
    public double getYAngle  ()  {return yAngle;}
    public double getZPos    ()  {return zPos;}
    public double getZAngle  ()  {return zAngle;}
    public double getMass    ()  {return mass;}
    public String getName    ()  {return name;}
    public float  getSpeed   ()  {return speed;}
    public int 	  getType    ()  {return type;}   
    public int    getDistance()  {return distance;}
    public int 	  getMinTemp ()  {return minTemp;}
    public int    getMaxTemp ()  {return maxTemp;}
    public int    getAvgTemp ()  {return avgTemp;}
    
    public void setXPos(double x){this.xPos = x;}
    public void setYPos(double y){this.yPos = y;}
    public void setZPos(double z){this.zPos = z;}
    
    public int GenerateMinTemp(){ // °C
    	Random random = new Random();
    	int distance  = this.getDistance();
    	int hotZone   = this.solarSystem.getHotZone();
    	int habZone   = this.solarSystem.getHabitableZone();
    	int coldZone  = this.solarSystem.getColdZone();
    	
    	//heiß - muss planetentypennummern noch ändern, evtl enum
    	if (this.type == 0) minTemp = random.nextInt(400)+400; // Lava
    	if (this.type == 1) minTemp = random.nextInt(250)+ 50; // Extreme Wüste
    	if (this.type == 2 && distance <= hotZone) minTemp = random.nextInt(250)+ 50; // Heißer Fels
    	
    	if (this.type == 1 && (distance > hotZone) && (distance <= habZone)) minTemp = random.nextInt(70)-70; // Normale Wüste
    	if (this.type == 2 && (distance > hotZone) && (distance <= habZone)) minTemp = random.nextInt(70)-70; // Normaler Fels
    	if (this.type == 3) minTemp = random.nextInt(65)-65; // Terra
    	if (this.type == 4) minTemp = random.nextInt(20)-5; // Jungle
    	if (this.type == 5) minTemp = random.nextInt(65)-30; // Water
    	
    	if (this.type == 6) minTemp = random.nextInt(65)-240; // Gas
    	if (this.type == 7) minTemp = random.nextInt(100)-280; // Eis
    	
    	return minTemp;
    }
    
    public int GenerateMaxTemp(){ // °C
    	Random random = new Random();
    	int distance  = this.getDistance();
    	int minTemp   = this.minTemp;
    	int hotZone   = this.solarSystem.getHotZone();
    	int habZone   = this.solarSystem.getHabitableZone();
    	int coldZone  = this.solarSystem.getColdZone();
    	
    	//heiß - muss planetentypennummern noch ändern, evtl enum
    	if (this.type == 0) maxTemp = minTemp + random.nextInt(700); // Lava
    	if (this.type == 1) maxTemp = minTemp + random.nextInt(250); // Extreme Wüste
    	if (this.type == 2 && distance <= hotZone) maxTemp = minTemp + random.nextInt(250); // Heißer Fels
    	
    	if (this.type == 1 && (distance > hotZone) && (distance <= habZone)) maxTemp = minTemp + random.nextInt(70); // Normale Wüste
    	if (this.type == 2 && (distance > hotZone) && (distance <= habZone)) maxTemp = minTemp + random.nextInt(70); // Normaler Fels
    	if (this.type == 3) maxTemp = minTemp + random.nextInt(65); // Terra
    	if (this.type == 4) maxTemp = minTemp + random.nextInt(35); // Jungle
    	if (this.type == 5) maxTemp = minTemp + random.nextInt(40); // Water
    	
    	if (this.type == 6) maxTemp = minTemp + random.nextInt(70); // Gas
    	if (this.type == 7) maxTemp = minTemp + random.nextInt(100); // Eis
    	
    	return maxTemp;
    }
    
    public int GenerateType() {
    	
    	Random random = new Random();
    	    	    	
    	int type = 0;    	
    	int distance = this.getDistance();
    	int hotZone  = this.solarSystem.getHotZone();
    	int habZone  = this.solarSystem.getHabitableZone();
    	int coldZone = this.solarSystem.getColdZone();
    	
    	// HotPlanet
    	if (distance <= hotZone) {
    		if (random.nextInt(2) == 0) type = 0; // Lava
    		if (random.nextInt(2) == 1) type = 1; // Heiße Wüste
    		if (random.nextInt(2) == 2) type = 2; // Heißer Fels
    	}
    	
    	// NormalPlanet
    	if ((distance > hotZone) && (distance <= habZone)) {
    		if (random.nextInt(3) == 0) type = 1; // Normal Wüste
    		if (random.nextInt(4) == 1) type = 2; // Normal Fels
    		if (random.nextInt(3) == 2) type = 3; // Terra
    		if (random.nextInt(3) == 3) type = 4; // Dschungel
    		if (random.nextInt(3) == 4) type = 5; // Wasser
    	}
    	// Cold Planets
    	if (distance > habZone) {
    		if (random.nextInt(1) == 0) type = 6; // Gas
    		if (random.nextInt(1) == 1) type = 7; // Eis
    	}
    	
    	return type;
    }
	
	private String GenerateName() // Wie der Name schon sagt...
	{
		String    sAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		String    sName = "";
		Character cRandChar;		
		Random iRandom = new Random();
		                 
		// 3 Anfangsbuchstaben ausdenken
		for (int i = 0; i < 3; i++) 
		{
			cRandChar = sAlphabet.charAt(iRandom.nextInt(sAlphabet.length()));
			sName = sName + cRandChar;
		}		
		// Und Nummern hinzufügen
		sName = sName + "-" + Integer.toString(iRandom.nextInt(899)+100);
		return sName;
	}
	
	private int GenerateDistance() 
	{
		Random iRandom = new Random();
		distance = iRandom.nextInt(99)+1;
		return distance;
	}
}
SolarSystem.java:
Java:
import java.util.*;
public class SolarSystem {

	public  int 	sunType, 
	 				hotZoneRadius,       // radius in AU
	 				habitableZoneRadius, // radius in AU
	 				coldZoneRadius;      // radius in AU
	private String  name;
	private Planet planet;	
	
	final List<Planet> planets = new LinkedList<Planet>();
	 
	    // constructor to create an empty solar system
		public SolarSystem(int iSunType) {
			this.sunType 		       = iSunType;
			this.name                  = GenerateName();
			this.hotZoneRadius         = GenerateHotZoneRadius(); // 10-30AU			
			this.habitableZoneRadius   = GenerateHabitableZoneRadius(); // = HotZone+Random(20);
			this.coldZoneRadius		   = GenerateColdZoneRadius();
		}
		
		// add a given planet to this solar system
	    public void   addPlanet(Planet p) {planets.add(p);}
	    public int    getHotZone()        {return hotZoneRadius;}
	    public int    getHabitableZone()  {return habitableZoneRadius;}
	    public int    getColdZone()       {return coldZoneRadius;}	    
	    public int    getPlanetCount()    {return planets.size();}	 // retrieve number of planets in this solar system   
	    public Planet getPlanet(int i)    {return planets.get(i);} // retrieve a planet given by its index, 0 <= i < planetCount
	    public String getName()           {return name;}
		
		private int GenerateHotZoneRadius(){
			int result = 0;
			Random random = new Random();
			// Defines the radius of the area where planets within will get extremely high temperatures
			// Depends maybe later on Suntype;
			result = random.nextInt(20)+10; 
			
			return result;
		}
		
		private int GenerateHabitableZoneRadius(){
			int result = 0;
			Random random = new Random();
			// Defines the outline of the area where planets within get extremely high temperatures
			// Depends maybe later on Suntype;
			result = this.getHotZone() + random.nextInt(30)+10; 
			
			return result;
		}
		private int GenerateColdZoneRadius(){
			int result = 0;
			Random random = new Random();
			// Defines the outline of the area where planets within get extremely high temperatures
			// Depends maybe later on Suntype;
			result = this.getHabitableZone() + 100; 
			
			return result;
		}
		
		private String GenerateName() // Wie der Name schon sagt...
		{
			String    sAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
			String    sName = "SYS ";			
			Character cRandChar;			
			Random iRandom = new Random();			                 
			// 2 Anfangsbuchstaben ausdenken
			for (int i = 0; i < 2; i++) {
				cRandChar = sAlphabet.charAt(iRandom.nextInt(sAlphabet.length()));
				sName = sName + cRandChar;
			}			
			// 3 Nummern hinzufügen
			sName = sName + "-" + Integer.toString(iRandom.nextInt(899)+100);		
			return sName;
		}
	   	 
	    
}

Grüße und danke im Voraus!
 

Fesker

Mitglied
Hey, ich bins wieder.. =P
Ich habe den Fehler zwar gefunden, weiß aber nicht, wie ich das ändern kann und möchte nicht wegen jedem Pieps einen neuen Thread aufmachen
.
Das GLWindow wird als allerallererstes initialisiert, scheinbar noch vor der MainWindow.class

Daher gibt es die sysList usw ja noch gar nicht und es folgt ein IndexOutofBound-Error, sofern ich die Variablen global in der GLWindow.class platziere.

Wenn ich die
Java:
GLWindow glw = new GLWindow();
				glw.GLMain();

die sich derzeit am Ende der MainWindow() Methode befinden, nun in den MouseListener packe, der zur planetList gehört, dann funktioniert die Sache; weil dann erst, nachdem die MainWindow.class fertig geladen ist, das GL-Window erstellt wird. (Allerdings ja dann immer eins pro Klick! :lol:) Im sysList-MouseListener passiert jedoch gar nichts :bahnhof:

Wie schaffe ich es, dass das GLWindow erst ganz am Ende geladen wird, nachdem praktisch alle JLists und Frames gebaut und Planeten generiert wurden usw. ?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I JOGL installieren Java Basics - Anfänger-Themen 2
Y Hilfe: JOGL / OPENGL in Frame Java Basics - Anfänger-Themen 2
B Effektive Implementierung für Darstellung großer Datenmengen in Jogl Java Basics - Anfänger-Themen 5
B JOGL 2 und Kameraperspektive Java Basics - Anfänger-Themen 6
S JOGL und Eclipse Java Basics - Anfänger-Themen 8
Kr0e Eclips + JOGL -> Wo ist meine MAIN-Funktion hin ? Java Basics - Anfänger-Themen 9
C JOGL und Eclipse Java Basics - Anfänger-Themen 3
C Kugel laufen lassen Java Basics - Anfänger-Themen 25
S "Kugel" vom Rand anprallen lassen Java Basics - Anfänger-Themen 6
kulturfenster User soll Radius von Kugel bestimmen Java Basics - Anfänger-Themen 4
I Billiard Kugel Java Basics - Anfänger-Themen 4
G Punkt bz. Kugel Java Basics - Anfänger-Themen 6
S Thread - Kugel im Kreis hin-und herflitzen lassen Java Basics - Anfänger-Themen 3
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
T if-else Bedingung wird ignoriert Java Basics - Anfänger-Themen 4
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
P Webseite vom Smartmeter wird nur unleserlich angezeigt Java Basics - Anfänger-Themen 7
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
M Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen Java Basics - Anfänger-Themen 3
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
Oneixee5 Maven Plugin wird 2 mal ausgeführt Java Basics - Anfänger-Themen 10
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
C Was tun wenn .class erwartet wird ? Java Basics - Anfänger-Themen 6
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
MiMa Ungültiges Datum wird nicht erkannt ?? Java Basics - Anfänger-Themen 6
schemil053 Multithread - Input verrutscht während etwas ausgegeben wird Java Basics - Anfänger-Themen 6
K REGEX - Rechnungsbetrag wird nicht richtig ausgelesen. Java Basics - Anfänger-Themen 3
_user_q Timer - ScheduledExecutorService wird schon vorher beendet Java Basics - Anfänger-Themen 5
X Erste Schritte Scanner eingabe wird übersprungen Java Basics - Anfänger-Themen 4
H Compiler-Fehler Klasse in einem Package wird nicht gefunden bzw. akzeptiert Java Basics - Anfänger-Themen 12
L Switch-Case Multiplikation wird nicht ausgegeben Java Basics - Anfänger-Themen 1
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
M Text wird in der Console nicht ausgegeben. Java Basics - Anfänger-Themen 11
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Zweidimensionales Array [][] wird untereinander ausgegeben Java Basics - Anfänger-Themen 14
sserio Math. Befehl wird rot markiert Java Basics - Anfänger-Themen 5
M Rechteck wird nicht angezeigt Java Basics - Anfänger-Themen 3
B Bungeecord | ProxiedPlayer wird nicht in ArrayList hinzugefügt Java Basics - Anfänger-Themen 1
U Methode wird genutzt, ohne dass ich die aufrufe? Java Basics - Anfänger-Themen 4
S Methoden Return Rückgabewert wird nicht übergeben Java Basics - Anfänger-Themen 8
M Mein quellcode wird nicht in der Konsole ausgegeben Java Basics - Anfänger-Themen 3
I Code wird nicht ausgeführt Java Basics - Anfänger-Themen 2
M wird der Konstruktor nicht als 1. ausgeführt? Java Basics - Anfänger-Themen 13
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
K Präzedenregeln in Java sagen, dass +expr und -expr vor + von Addition und - von Addition stehen, warum wird dann z. B. a+b als eine Addition ausgeführ Java Basics - Anfänger-Themen 7
M Was wird hier genau getestet? Java Basics - Anfänger-Themen 9
M Wie schreibe ich eine if-Verzweigung um, so dass ein Bedingungsoperator benutzt wird? Java Basics - Anfänger-Themen 9
I Programm erkennt nicht an das Array zurückgegeben wird trotz Initialisierung *einfach* Java Basics - Anfänger-Themen 9
K Jlabel mit itemlistevent Text gegeben, wird nicht angezeigt Java Basics - Anfänger-Themen 5
P Mein Programm wird zwar erfolgreich Compiliert, öffnet sich aber nicht Java Basics - Anfänger-Themen 6
M Referenzen zuweisen und wird gleichzeitig ausgeführt Java Basics - Anfänger-Themen 6
O System.out.println wird nicht ausgegeben? Java Basics - Anfänger-Themen 11
Zrebna Umgebungsvariable Wieso wird meine verwendete JDK-Version in der Prompt nicht erkannt? Java Basics - Anfänger-Themen 6
el_pato DialogFenster wird nicht in Schleife geöffnet? Java Basics - Anfänger-Themen 30
J if-Schleife innerhalb einer if-Schleife wird in der Konsole nicht gelesen Java Basics - Anfänger-Themen 4
P Apache Derby wird in Eclipse trotz Anbindung nicht gefunden Java Basics - Anfänger-Themen 6
H Array wird als Rückgabewert nicht akzeptiert? Java Basics - Anfänger-Themen 2
Poppigescorn scan.nextInt() wiederholen bis eine Zahl eingeben wird Java Basics - Anfänger-Themen 7
F Session wird mehrfach erzeugt Java Basics - Anfänger-Themen 11
F Initialisieren eines Web-Mp3 Players in Tabs durch "booleans" erst wenn Tab geöffnet wird ...? Java Basics - Anfänger-Themen 1
fuerteb Compiler-Fehler Methode wird nicht bzw. als Fehler erkannt Java Basics - Anfänger-Themen 4
L JScrollPane wird nicht angezeigt Java Basics - Anfänger-Themen 10
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
J JTable Titel wird nicht angezeigt Java Basics - Anfänger-Themen 6
krgewb Long wird gerundet Java Basics - Anfänger-Themen 2
Zwanglos Warum wird nur die erste Zeile im while Block ausgeführt? Java Basics - Anfänger-Themen 8
F Wieso wird immer die falsche Mausposition angegeben? Java Basics - Anfänger-Themen 1
H GridPane wird nicht angezeigt Java Basics - Anfänger-Themen 0
M Was habe ich hier falsch, dass wenn ich z.B.: 11 eingebe mir false zurück gegeben wird? Java Basics - Anfänger-Themen 2
M Java Spiel wie Wer wird Millionär Java Basics - Anfänger-Themen 1
H Endkapital wird nicht korrekt ausgegeben. Java Basics - Anfänger-Themen 5
C Methodenrückgabe wird in der main nicht berücksichtigt Java Basics - Anfänger-Themen 2
X compareTo Methode wird ignoriert Java Basics - Anfänger-Themen 7
kodela Hauptklasse wird nicht gefunden Java Basics - Anfänger-Themen 3
H Befehl wird nicht ausgeführt - System.out.println Java Basics - Anfänger-Themen 3
I Input/Output Code wird doppelt ausgeführt Java Basics - Anfänger-Themen 3
P Bedingung in Schleife wird nicht ausgeführt Java Basics - Anfänger-Themen 5
P Variablen HttpResponse.getBody() wird automatisch org.json Object und kann nicht zu json.simple Object gecastet werden? Java Basics - Anfänger-Themen 7
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
N package wird doppelt im exporer angezeigt Java Basics - Anfänger-Themen 2
N Bedinugng If-Abfrage wird nie erfüllt Java Basics - Anfänger-Themen 4
M Else wird nicht ausgeführt. Java Basics - Anfänger-Themen 5
H Wie wird ein String intern gespeichert? Java Basics - Anfänger-Themen 10
A char array wird überschrieben Java Basics - Anfänger-Themen 6
E Methoden Action Event wird nicht vollständig ausgeführt Java Basics - Anfänger-Themen 3
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
S setContentView(R.Layout.XXX) wird Rot angezeigt Java Basics - Anfänger-Themen 0
C Beispiel-Code mit Pair wird nicht compiliert. Java Basics - Anfänger-Themen 8

Ähnliche Java Themen


Oben