1

我正在尝试为游戏制作 GUI。首先,我在 jFrame 中加载欢迎屏幕。他们输入详细信息,如果详细信息正确,它应该加载另一个类中的下一个屏幕。它正确检查详细信息并打开新窗口但不显示它,它只是黑色?我不确定这是我的电脑还是我的代码?这是第二个窗口的代码:

import java.net.*;
import java.io.*;
import java.util.*;

public class ClientGUI extends javax.swing.JFrame {

/**
 * Creates new form ClientGUI
 */
private BufferedWriter writer;
public ClientGUI() {
     /*
     * Set the Nimbus look and feel
     */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /*
     * If Nimbus (introduced in Java SE 6) is not available, stay with the
     * default look and feel. For details see
     * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
     */
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(ClientGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(ClientGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(ClientGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(ClientGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>

    /*
     * Create and display the form
     */
    setVisible(true);
    initComponents();
}

/**
 * This method is called from within the constructor to initialise the form.
 * WARNING: Do NOT modify this code. The content of this method is always
 * regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">

    jButton1.setText("Move N");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });

    jButton2.setText("Move E");
    jButton2.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton2ActionPerformed(evt);
        }
    });

    jButton3.setText("Move S");
    jButton3.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton3ActionPerformed(evt);
        }
    });

    jButton4.setText("Move W");
    jButton4.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton4ActionPerformed(evt);
        }
    });

    jButton5.setText("Pickup");
    jButton5.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton5ActionPerformed(evt);
        }
    });

    jButton6.setText("Quit");
    jButton6.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton6ActionPerformed(evt);
        }
    });



private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

    try{
        writer.write("Move N");
        writer.newLine();
        writer.flush();
    }
    catch(Exception e){
            System.out.println("error");
    }

}                                        

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
   try{
        writer.write("Move E");
        writer.newLine();
        writer.flush();
    }
    catch(Exception e){
            System.out.println("error");
    }
}                                        

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    try{
        writer.write("Move S");
        writer.newLine();
        writer.flush();
    }
    catch(Exception e){
            System.out.println("error");
    }
}                                        

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    try{
        writer.write("Move W");
        writer.newLine();
        writer.flush();
    }
    catch(Exception e){
            System.out.println("error");
    }
}                                        

private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    try{
        writer.write("PICKUP");
        writer.newLine();
        writer.flush();
    }
    catch(Exception e){
            System.out.println("error");
    }
}                                        

private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    setVisible(false);
}                                        

/**
 * @param args the command line arguments
 */
public void run(){
try {
        final Socket server = new Socket("localhost", 30000);
    //Creates the socket to be used, has to be final because of innerclass
    InputStream in = server.getInputStream();
    OutputStream out = server.getOutputStream();
    //Creates the input and output streams

    BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
    //Creates the reader to read what the client inputs
    final BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    //Creates the reader to read what the server writes to the client, has to be final as used in innerclass
    writer = new BufferedWriter(new OutputStreamWriter(out));
    //Creates the writer so the client can write on the commandline

    Thread serverThread = new Thread(){
        //Modifies the Thread class
        public void run(){
        boolean quit = false;
        while (!quit){
            String line = "";
            try{
            line = reader.readLine();
            //Tries to read what the server has sent
            }
            catch(IOException e){
            System.out.println("Error" + e.getMessage());
            quit = true;
            //If it is unable to read what the server sent, it quits the loop
            }
            if (line != "null"){
                System.out.println(line);
            //So long as the line sent is not "null" it prints the line to the client
            }
        }
        }           
    };
    serverThread.start();
    //Starts the Thread

    String input = stdin.readLine();
    while (input != null) {
    writer.write(input);
    writer.newLine();
    writer.flush();
    input = stdin.readLine();
    //Reads what the client writes
    }
    System.exit(1);
    server.close();
} 
catch (IOException e) {
    System.out.println("error" + e.getMessage());
    e.printStackTrace();
    //Catches any errors with reading and writing to and from the server
}
}

加上 netbeans 默认做的一些额外的摆动位。任何帮助将不胜感激,谢谢。

4

1 回答 1

2

你的问题可能在这里:

setVisible(true);
initComponents();

你应该颠倒这个顺序:

initComponents();
setVisible(true);

此外,您似乎正在做 Socket 工作。如果是这样,希望您注意在后台线程中执行此操作,而不是在主 Swing 事件线程 EDT 中。

于 2012-04-18T16:52:22.653 回答