Could not find main class: ...

herdi

Mitglied
Hallo java-forum.org Community,

gerade beschäftige ich mich mit einem mir rätselhaften Problem.
Ich habe eine Loginmaske mit dem WindowBuilder erstellt. Er generiert mir schön und gut den Programmcode. Sobald ich im Konstruktor ein JTextField entnehme oder gar ändere erhalte ich beim starten des Programms promt die Fehlermeldung, dass meine main class nicht gefunden werden kann.
Wieso ist das so? Liegt es daran, dass WindowBuilder die ganzen Initialisierungen in den Kunstruktor schreibt?

Viele Grüße

herdi
 
U.a. instanziere ich bereits Komponenten...

Java:
public class Mainframe extends JFrame {
	private static Mainframe frame = new Mainframe();
	
	private JPanel contentPane;
	private JTextField form_server;

Das ist meine Main-Methode, generiert von WindowBuilder:

Java:
	public static synchronized void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try{
					frame.setVisible(true);
					
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

Dies ist der Konstruktor

Java:
public Mainframe() {
		setTitle("Titel");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 453, 536);
		contentPane = new JPanel();
		contentPane.setBackground(Color.WHITE);
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		GridBagLayout gbl_contentPane = new GridBagLayout();
		gbl_contentPane.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0};
		gbl_contentPane.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
		gbl_contentPane.columnWeights = new double[]{0.0, 0.0, 1.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
		gbl_contentPane.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
		contentPane.setLayout(gbl_contentPane);
//......
		

		JLabel lblServer = new JLabel("Server:");
		java.net.URL server_ico = getClass().getResource("/ico_server.png");
		lblServer.setIcon(new ImageIcon(server_ico));
		GridBagConstraints gbc_lblServer = new GridBagConstraints();
		gbc_lblServer.insets = new Insets(0, 0, 5, 5);
		gbc_lblServer.anchor = GridBagConstraints.WEST;
		gbc_lblServer.gridx = 2;
		gbc_lblServer.gridy = 2;
		contentPane.add(lblServer, gbc_lblServer);
		
	
	form_server = new JTextField();
		GridBagConstraints gbc_form_server = new GridBagConstraints();
		gbc_form_server.insets = new Insets(0, 0, 5, 5);
		gbc_form_server.fill = GridBagConstraints.HORIZONTAL;
		gbc_form_server.gridx = 2;
		gbc_form_server.gridy = 3;
		contentPane.add(form_server, gbc_form_server);
		form_server.setColumns(10);

//....

So bald ich nur
Java:
form_server = new JTextField();
ändere etc. kommt die Meldung.
 
Zuletzt bearbeitet:
Was zur Hölle? Erstens mal: das "private static Mainframe frame = new Mainframe();" ist ein no go und total unnötig.
2. Deine main Methode muss public static void main(String[] args) lauten nicht public static synchronized.
3. Lerne erstmal eine Gui per Hand zu bauen bevor du GUI builder überhaubt angreifst. Der Code den du da produzierst ist eine Katastrophe.
 
. Lerne erstmal eine Gui per Hand zu bauen bevor du GUI builder überhaubt angreifst. Der Code den du da produzierst ist eine Katastrophe.

Danke du Experte. Lerne du erstmal richtig zu lesen und zu verstehen. Ich selber habe da nichts an Code produziert.

Damit ist der Code gemeint, den du mithilfe von WindowBuilder hast erstellen lassen. Oft muss man bei den WindowBuildern vor der Nutzung erst ein paar Sachen einstellen um einen einigermaßen lesbaren Code zu bekommen. Wenn du
Code:
synchronized
weglässt, lässt sich das Programm dann ausführen (ohne Fehlermeldung?)
 
Java:
private static Mainframe frame = new Mainframe();
löschen und
Java:
Mainframe frame = new Mainframe();
in die main Methode schreiben.
Sry für den Ton vorhin, wenn ich Freitag nachts noch ins Forum schau kommt immer sowas raus 😀
 
Zuletzt bearbeitet:
Es funktioniert nun.
Gelöst habe ich das wie folgt:

Java:
private static Mainframe frame = new Mainframe();

ersetzt durch

Java:
private static Mainframe frame;

und die Main- Methode entsprechend angepasst:

Java:
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
frame = new Mainframe();
                try{
                    frame.setVisible(true);
                    
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

Nach diesen Änderungen läuft es nun endlich.
Ändere ich nach:

Java:
Mainframe frame = new Mainframe();

so funktionieren weitere Zugriffe auf mein Frame nicht, die ich brauche.
Ich belasse es nun so. Vielen Dank euch beiden! 🙂

Java:
Sry für den Ton vorhin, wenn ich Freitag nachts noch ins Forum schau kommt immer sowas raus :D[/QUOTE]

Ich sehe drüber hinweg :D

Nun obwohl das Problem gelöst ist, würde ich gerne den Auslöser für dieses verstehen...kann mir das jmd. erklären, der mehr Plan von SWING hat als ich?
 
Herdi,
Java:
public static synchronized void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try{
                    frame.setVisible(true);
                    
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
public static synchronized void main(String[] args) is NOT wrong. In other words: This synchronized is not superfluous but essential. The reason is the internal invocation of the EventQueue.invokeLater(new Runnable(). Otherwise your program may run into some synchronization problems. For example, the setVisible(true) may appear to early or a little too late😀
 

Zurück
Oben