Ressourcen laden beim Ausführen der .jar nicht schnell genug

BlunatiX

Mitglied
Hallo liebe Community,
wenn ich mein Java-Programm starte, ist es in 80% der Fälle so, dass Bilder, die ich als JLabel eingefügt habe, normale Label und auch Button nicht schnell genug geladen werden. Die Button erscheinen nachträglich, wenn man die Maus über sie bewegt, die Label und Bilder nicht.
Woran könnte das liegen?
Hier ein Bild, die das Ganze aussieht, wenn es tatsächlich geladen ist:

Anbei mein Quellcode von der Hauptklasse und der Menüklasse, die das Menü grafisch erzeugt:
Hauptklasse:
Java:
// Haupt-Klasse
public class GUI {

	// Haupt-Methode
	public static void main(String[] args) {
		// Ausführen einer anderen Methode
		gui();
	}

	// Methode gui
	public static void gui() {
		// Einbinden anderen Klassen
		Main Main = new Main();
		// Aufrufen einer Methode der eingebundenen Klasse
		Main.Mainmenu();		
	}
}
Menüklasse:
Java:
// Importe
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

// Klasse Main für das Hauptmenü
public class Main {
	// Einbinden anderer Klassen
	Abc Abc = new Abc();
	Einstellungen Einstellungen = new Einstellungen();
	Einwohnerzahlen Einwohnerzahlen = new Einwohnerzahlen();
	Menu Menu = new Menu();
	TicTacToe TicTacToe = new TicTacToe();

	// Klassen-Initialisierungen (JFrame)
	JFrame fMain;

	// Methoden-Initialisierungen (Label und Button)
	JLabel labMainUeberschrift;
	JLabel labMainAnleitungshinweis1;
	JLabel labMainAnleitungshinweis2;
	JLabel labMainAnleitungshinweis3;
	JLabel labMainBild;

	JButton bMainSpielstarten;
	JButton bMainEinstellungen;
	JButton bMainBeenden;

	// Bilderimport
	Icon iconMainHintergrund = new ImageIcon(getClass().getResource("ImageMain.png"));
	
	// Methode Mainmenu als Fenster für die Darstellung des Hauptmenüs
	public void Mainmenu() {

		// JFrame: Klassendeklaration und Klassenkonkretisierung
		fMain = new JFrame("2-Spieler-Reaktor");
		fMain.setSize(800, 600);
		fMain.setLocationRelativeTo(null);
		fMain.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		fMain.setLayout(null);
		fMain.setResizable(false);
		fMain.setVisible(true);
		fMain.setFocusable(true);
		
		// JMenuBar: Aufrufen einer Methode und Einbinden der Menüleiste
		Menu.MenuBarAnzeigen();
		fMain.setJMenuBar(Menu.MenuBar);

		// JLabel: Methodendeklaration und Methodenkonkretisierung (5 Label)
		labMainUeberschrift = new JLabel("2-Spieler-Reaktor");
		labMainUeberschrift.setBounds(280, 300, 240, 40);
		labMainUeberschrift.setHorizontalAlignment(SwingConstants.CENTER);
		labMainUeberschrift.setVerticalAlignment(SwingConstants.TOP);
		labMainUeberschrift.setFont(new Font("Comic Zine", Font.BOLD, 25));
		
		labMainAnleitungshinweis1 = new JLabel("Anleitungen");
		labMainAnleitungshinweis1.setBounds(540, 175, 200, 25);
		labMainAnleitungshinweis1.setHorizontalAlignment(SwingConstants.CENTER);
		labMainAnleitungshinweis1.setFont(new Font("Tahoma", Font.BOLD, 18));
		
		labMainAnleitungshinweis2 = new JLabel("findest du in");
		labMainAnleitungshinweis2.setBounds(540, 200, 200, 25);
		labMainAnleitungshinweis2.setHorizontalAlignment(SwingConstants.CENTER);
		labMainAnleitungshinweis2.setFont(new Font("Tahoma", Font.BOLD, 18));
		
		labMainAnleitungshinweis3 = new JLabel("der Menüleiste!");
		labMainAnleitungshinweis3.setBounds(540, 225, 200, 25);
		labMainAnleitungshinweis3.setHorizontalAlignment(SwingConstants.CENTER);
		labMainAnleitungshinweis3.setFont(new Font("Tahoma", Font.BOLD, 18));
		
		labMainBild = new JLabel(iconMainHintergrund);
		labMainBild.setBounds(0, 0, 790, 550);

		// JButton: Methodendeklaration und Methodenkonkretisierung (3 Button)
		bMainSpielstarten = new JButton("Spiel starten");
		bMainSpielstarten.setBounds(160, 398, 140, 50);
		bMainSpielstarten.setFont(new Font("Tahoma", Font.BOLD, 15));
		bMainSpielstarten.addActionListener(new ActionHandler());

		bMainEinstellungen = new JButton("Einstellungen");
		bMainEinstellungen.setBounds(330, 398, 140, 50);
		bMainEinstellungen.setFont(new Font("Tahoma", Font.BOLD, 15));
		bMainEinstellungen.addActionListener(new ActionHandler());

		bMainBeenden = new JButton("Beenden");
		bMainBeenden.setBounds(500, 398, 140, 50);
		bMainBeenden.setFont(new Font("Tahoma", Font.BOLD, 15));
		bMainBeenden.addActionListener(new ActionHandler());

		// Einbindung der Methoden in die JFrame-Klasse
//		fMain.add(labMainUeberschrift);
		fMain.add(labMainAnleitungshinweis1);
		fMain.add(labMainAnleitungshinweis2);
		fMain.add(labMainAnleitungshinweis3);
		fMain.add(bMainSpielstarten);
		fMain.add(bMainEinstellungen);
		fMain.add(bMainBeenden);
		fMain.add(labMainBild);

	}

	// ActionListener
	public class ActionHandler implements ActionListener {

		@SuppressWarnings("static-access")
		@Override
		public void actionPerformed(ActionEvent e) {
			// ActionListener für Button (Funktion: Starten des Spiels)
			// Je nach getroffenen Einstellungen werden die benötigten Spiele gestartet
			if (e.getSource() == bMainSpielstarten) {
				if (Einstellungen.einstellungenSpielAbcSpielen == true) {
					Abc.AbcSpiel();
					fMain.dispose();
				} else if (Einstellungen.einstellungenSpielAbcSpielen == false
						&& Einstellungen.einstellungenSpielEinwohnerzahlenSpielen == true) {
					Einwohnerzahlen.EinwohnerzahlenSpiel();
					fMain.dispose();
				} else if (Einstellungen.einstellungenSpielAbcSpielen == false
						&& Einstellungen.einstellungenSpielEinwohnerzahlenSpielen == false 
						&& Einstellungen.einstellungenSpielTicTacToeSpielen == true) {
					TicTacToe.TicTacToeSpiel();
					fMain.dispose();
				}
			}
			// ActionListener für Button (Funktion: Schließen des Fensters und Öffnen eines anderen Fensters)
			else if (e.getSource() == bMainEinstellungen) {
				Einstellungen.Einstellungsmenue();
				fMain.dispose();
			}
			// ActionListener für Button (Funktion: Schließen des Programms)
			else if (e.getSource() == bMainBeenden) {
				System.exit(0);
			}
		}
	}
}
 
Zuletzt bearbeitet:
Hi,
Die Methode fMain.setVisible(true); sollte als letzte aufgerufen werden.... Ändere dies in der Mainmenu() mal.
Wenn's dann immer noch gleich ist, melde dich wieder
 

Zurück
Oben