2012-04-18 22 views
1

我正在嘗試爲遊戲製作GUI。首先,我在jFrame中加載一個歡迎屏幕。他們輸入詳細信息,如果細節正確,它應該加載下一個不同類別的屏幕。它正確檢查細節並打開新窗口,但不顯示它,它只是黑色?我不確定它是我的電腦還是我的代碼? 這是第二個窗口中的代碼:在Java中Netbeans新窗口全黑嗎?

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的默認操作一些額外的擺動位。 任何幫助,將不勝感激,謝謝。

+0

我在該代碼中看到73個編譯錯誤。爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 – 2012-04-18 17:20:34

+0

*「這是第二個窗口的代碼:」*請參閱[使用多個JFrames,好/壞實踐?](http://stackoverflow.com/a/9554657/418556) – 2012-04-18 17:23:13

回答

2

您的問題可能在這裏:

setVisible(true); 
initComponents(); 

你應該扭轉這個順序:

initComponents(); 
setVisible(true); 

而且,你似乎做的Socket工作。如果是這樣,希望你在後臺線程,而不是主要的Swing事件線程,美國東部時間這樣做。

+0

我試過了,但現在新窗口完全是空白的,而不是黑色了。謝謝 – Coolmurr 2012-04-18 16:59:16

+0

@Coolmurr:你還可以解決第二個問題,即線程問題嗎? – 2012-04-18 17:00:27

+0

我不認爲這是問題,因爲它之前的線程有效 – Coolmurr 2012-04-18 17:09:41