Class A extend JFrame{
private M m;
private N n;
private P p;
public A(M m,N n,P p){ //M,N,P分别是三种数据类型
this.m = m;
this.n = n;
this.p = p
}//
......后面是自动生成的JFrame组件的一些代码
}我如此使用:
A a = new A(m,n,p) //传了三个相对应类型的参数进去
a.setVisible(true);
结果显示出来的Frame只有主框架,不显示其它组件(例如Button,Lable之类),最小化再点击显示出来就显示黑色的了,调试时把构造函数的 this.m = m 注销掉后,重新运行,显示正常,一加上this.m = m 又马上出问题了,请高手指点下问题所在,困扰了很久了。。
private M m;
private N n;
private P p;
public A(M m,N n,P p){ //M,N,P分别是三种数据类型
this.m = m;
this.n = n;
this.p = p
}//
......后面是自动生成的JFrame组件的一些代码
}我如此使用:
A a = new A(m,n,p) //传了三个相对应类型的参数进去
a.setVisible(true);
结果显示出来的Frame只有主框架,不显示其它组件(例如Button,Lable之类),最小化再点击显示出来就显示黑色的了,调试时把构造函数的 this.m = m 注销掉后,重新运行,显示正常,一加上this.m = m 又马上出问题了,请高手指点下问题所在,困扰了很久了。。
public class Chat extends javax.swing.JFrame {
private DefaultListModel jModel;
private JxtaSocket m_socket = null;
private String chater = null; /** Creates new form Chat */
public Chat(JxtaSocket socket,String name, Point point) {
initComponents();
m_socket = socket;
chater = name;
jClew.setText("和" + chater + "聊天中");
this.setTitle(chater);
jModel = new DefaultListModel();
jlHistory.setModel(jModel);
setLocation((point.x + 300),(point.y + 200)); } /** This method is called from within the constructor to
* initialize 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">
private void initComponents() { jpaneList = new javax.swing.JScrollPane();
jlHistory = new javax.swing.JList();
jpaneText = new javax.swing.JScrollPane();
jMessage = new javax.swing.JTextArea();
jbSend = new javax.swing.JButton();
jClew = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); jlHistory.setModel(new javax.swing.AbstractListModel() {
String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
public int getSize() { return strings.length; }
public Object getElementAt(int i) { return strings[i]; }
});
jpaneList.setViewportView(jlHistory); jMessage.setColumns(20);
jMessage.setRows(5);
jpaneText.setViewportView(jMessage); jbSend.setText("发送");
jbSend.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jbSendActionPerformed(evt);
}
}); jClew.setText("jLabel1"); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jClew, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
.addComponent(jpaneList, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
.addComponent(jpaneText, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
.addComponent(jbSend, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 103, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jClew, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jpaneList, javax.swing.GroupLayout.PREFERRED_SIZE, 126, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jpaneText, javax.swing.GroupLayout.PREFERRED_SIZE, 98, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jbSend)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
); pack();
}// </editor-fold> private void jbSendActionPerformed(java.awt.event.ActionEvent evt) {
try
{
OutputStream out = m_socket.getOutputStream();
String s = jMessage.getText();
jMessage.setText("");
out.write(s.getBytes(), 0, s.length());
out.flush();
out.close();
jModel.addElement("我: " + s);
}
catch(IOException e)
{ }
finally
{
jMessage.removeAll();
}
} /**
* @param args the command line arguments
*/
public void listen()
{
InputStream in;
int length = 256*256;
int realLen;
byte[] buffer = new byte[length];
try
{
m_socket.setSoTimeout(60*60*1000);
in = m_socket.getInputStream();
while(true)
{
realLen = in.read(buffer,0,length);
String message = new String(buffer,0,realLen);
jModel.addElement(chater +": " + message);
}
}
catch(IOException e)
{
System.out.println("test!"); }
}
// Variables declaration - do not modify
private javax.swing.JLabel jClew;
private javax.swing.JTextArea jMessage;
private javax.swing.JButton jbSend;
private javax.swing.JList jlHistory;
private javax.swing.JScrollPane jpaneList;
private javax.swing.JScrollPane jpaneText;
// End of variables declaration }这是源码,其中很大一部分都是netbeans生成的布局代码,另外,listen是自己添加的函数。
m_socket = socket; 这一句注销掉就可正常显示了,但这句运行是没错的,想单步调试试下,但当了调试不了,提示已编译但没调试信息,烦恼中。。
chat.setVisible(true);
new Thread(){
public void run(){
chat.listen();
}
};这样,就可正常显示组件了,但收到的数据又显示不出来了,郁闷呀,继续调试。。