我正在尝试为游戏制作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会这样做。 任何帮助将不胜感激,谢谢。
答案 0 :(得分:2)
你的问题可能在这里:
setVisible(true);
initComponents();
你应该改变这个顺序:
initComponents();
setVisible(true);
此外,您似乎正在进行Socket工作。如果是这样,希望你在后台线程中这样做,而不是在主要的Swing事件线程中,EDT。