Java Hilfe für taks [neues Problem]

taks

PCGH-Community-Veteran(in)
Java Hilfe für taks [neues Problem]

Ich bräuchte kurz eure Hilfe.
Bin schon Ewigkeiten nicht mehr am Programmieren gewesen und hänge grad fest -.-
Ich habe zwei Klassen, eine MainApp und MainView.

Im MainApp instanziere ich ein MainView, aber wie bewerkstellige ich es, dass das View ausserhalb der EventQueue in der MainApp benutzbar ist?


Code:
package Application;

import java.awt.EventQueue;

public class MainApp {

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



Code:
package Views;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.LineBorder;

import Application.TestClass;

public class MainView {

    public JFrame frame;
    private JTextField edtInput;
    private JLabel lblResult;

    

    /**
     * Create the application.
     */
    public MainView() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        JPanel panel = new JPanel();
        frame.getContentPane().add(panel, BorderLayout.CENTER);
        panel.setLayout(null);
        
        lblResult = new JLabel("");
        lblResult.setBorder(new LineBorder(new Color(0, 0, 0)));
        lblResult.setHorizontalAlignment(SwingConstants.CENTER);
        lblResult.setBounds(192, 128, 89, 23);
        panel.add(lblResult);
        
        JButton btnEnter = new JButton("Enter");
        btnEnter.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                
            }
        });
        btnEnter.setBounds(192, 58, 89, 23);
        panel.add(btnEnter);
        
        edtInput = new JTextField();
        edtInput.setBounds(75, 59, 86, 20);
        panel.add(edtInput);
        edtInput.setColumns(10);
    }
    
    public int getEdit(){
        String str = edtInput.getText();
        return Integer.valueOf(str).intValue();
    }
    
    public void setLabel(Integer value){
        lblResult.setText(Integer.toString(value));    
    }
}


Unten findet ihr die neuste Frage ^^
Client Server UDP Kommunikation
 
Zuletzt bearbeitet:
AW: Java Hilfe für taks

Zu Anfang sei gesagt das du den Code getrost aus der EventQueque rausholen kannst, also einfach:
Code:
package Application;

public class MainApp {

    public static void main(String[] args) {
        MainView window = new MainView();
	window.frame.setVisible(true);

    }
}

Um window ausserhalb nutzen zu koennen musst du window in diesem speziellen Fall global deklarieren, also z.B.:
Code:
package Application;

import java.awt.EventQueue;

public class MainApp {

    private static MainView window;

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

Da blutet mir jetzt aber das Programmiererherz :D static solltest du weitgehend vermeiden, ist in Java kein schoener Stil. Inklusive zwei weiteren kleinen Optimierungen waere es dann so:
Code:
package Application;

import java.awt.EventQueue;

public class MainApp {

    private MainView window;

    public static void main(String[] args) {	
        EventQueue.invokeLater(new Runnable() {		
	    public void run() {
                new MainApp();

	    }
        });
    }

    private MainApp() {
        try {
             UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
             window = new MainView();
	     window.frame.setVisible(true);
	   
					
	} catch (Exception e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null,
                "Something went wrong: " + e.getLocalizedMessage(),
                "Internal Error",
                JOptionPane.ERROR_MESSAGE);
				
        }
    }
}
 
Zuletzt bearbeitet:
AW: Java Hilfe für taks

So, ich bräuchte mal wieder etwas Hilfe in Java.

Es geht um ein Server (ServerLog.java + ServerThread.java) und ein Client(ClientLog.java + UdpClient.java) welche über UDP kommunizieren.
Client schickt Anfrage an Server, Server packt etwas in das Paket rein und schickt es zurück.
Die "Logs" sind die GUIs welche dann je einen neuen Thread für die Kommunikation erstellen.

Nur bleibt mir der Client immer da hängen wo er auf die Antwort vom Server wartet.
Beim genaueren hinsehen kommt die Anfrage beim Server garned vorbei.

Jedoch komm ich einfach nicht mehr weiter und hab keinen Plan wieso die Anfrage vom Client nicht ankommt.
Mit TCP hab ich keine Probleme, da funktioniert alles wie es soll (Ist nicht in diesen zwei Projekten dabei).

Tutorial hab ich folgendes verwendet:
Writing a Datagram Client and Server (The Java™ Tutorials > Custom Networking > All About Datagrams)


Wäre froh wenn einer von euch mal Lust und Zeit hätte um rein zu schauen.


ps: files sind ein bisschen gross um sie hier als Code rein zu hängen, darum zip

Gruss taks
 

Anhänge

  • java files.zip
    4,2 KB · Aufrufe: 2
Zuletzt bearbeitet:
AW: Java Hilfe für taks [neues Problem]

Dein Server-Thread wird nie gestartet.

ServerLog.java

Code:
public void startRunning() throws IOException {
    thread = new ServerThread(port);
    [B]thread.start();[/B] // Aufruf fehlt im Original
    running = true;
    timer.start();
}

Sollte spätestens beim Debuggen eigentlich schnell auffallen. Der Server-Code wird schließlich nie ausgeführt. Ich würde dir ja empfehlen, für den Anfang die Beispiele so einfach wie möglich zu halten. Die GUI kann man sich in dem Fall ja wirklich sparen.
 
AW: Java Hilfe für taks [neues Problem]

Danke :-X

Ja, ich habs auch ohne GUI versucht, das gleiche Problem.
Darum dachte ich ich frag grad mit dem GUI Code.

Aber wieso ich den Debugger nicht genommen hab weiss ich auch nicht, nach 10 Stunden am Stück arbeiten wäre manchmal eine Pause sinnvoll -.-
 
Zurück