创建了PrintWriter writer; writer没有实例化为什么可以调用方法,而且还可以正常运行

limoxin_ 2018-05-06 06:21:34
代码在最下面,我把问题写在代码里,其他注释删除了,为了方便各位看到我的问题,非常感谢
先上群里问的结果:






没有解决,下一个(图片里的其他言论我打马赛了):



我在代码里添加了:

outgoing 是单行消息框,如果writer没有被实例化它就是空的,按下send按钮消息框里会显示true,我的测试结果:







正题来了~ :
import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SimpleChatClient {

JTextField outgoing;//单行消息框
PrintWriter writer;
Socket socket;

public void go() {
JFrame frame = new JFrame("Ludicrously Simple Chat Client");
JPanel mainPanel = new JPanel();
outgoing = new JTextField(20);
JButton sendButton = new JButton("Send");
sendButton.addActionListener(new SendButtonListener());
mainPanel.add(outgoing);
mainPanel.add(sendButton);
frame.getContentPane().add(BorderLayout.CENTER, mainPanel);
setUpNetworking();
frame.setSize(400, 500);
frame.setVisible(true);
}
private void setUpNetworking() {
try {
socket = new Socket("127.0.0.1",5000);
writer = new PrintWriter(socket.getOutputStream());//方法里面实例化,局域对象,当方法结束它就不存在了
System.out.println("networking established");
}catch(IOException e) {
e.printStackTrace();
}
}
public class SendButtonListener implements ActionListener{
public void actionPerformed(ActionEvent ev) {
try {
/**
* 程序正常运行
* 这里明明没有实例化
* 却可以调用方法
* 而且正常运行
* 它怎么可以?好迷惑-.-
*/
writer.println(outgoing.getText());
writer.flush();
}catch(Exception e) {
e.printStackTrace();

}
boolean a = writer == null;//这句不需要 刚刚为了测试这个writer是否为空添加的,当按下send按钮时单行消息框里面显示判断结果
outgoing.setText(""+a);//单行消息框显示内容
outgoing.requestFocus();
}

}
public static void main(String[]args) {
new SimpleChatClient().go();
}
}
...全文
769 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
do_wa5810 2020-04-22
  • 打赏
  • 举报
回复
监听事件里面可以调用但是可以写入吗
limoxin_ 2018-05-22
  • 打赏
  • 举报
回复
引用 4 楼 lye2000000_super 的回复:
[quote=引用 3 楼 limoxin_ 的回复:] [quote=引用 2 楼 qq_27985591 的回复:] writer = new PrintWriter(socket.getOutputStream());//方法里面实例化,局域对象,当方法结束它就不存在了 你这句注释就不对了,你的writer引用是这个SimpleChatClient类的成员变量,只要这个SimpleChatClient类的对象生命周期还在,这个writer就在
首先非常感谢您的回答,那为什么我对内部类里的writer测试的结果是null呢?[/quote] 你测试的时候那个writer还没有赋值呢,自然是null,你是在按钮的点击事件里赋值的,只有点了之后才会有值。。。。执行顺序的问题。[/quote] 谢谢,非常感谢~
  • 打赏
  • 举报
回复
引用 3 楼 limoxin_ 的回复:
[quote=引用 2 楼 qq_27985591 的回复:] writer = new PrintWriter(socket.getOutputStream());//方法里面实例化,局域对象,当方法结束它就不存在了 你这句注释就不对了,你的writer引用是这个SimpleChatClient类的成员变量,只要这个SimpleChatClient类的对象生命周期还在,这个writer就在
首先非常感谢您的回答,那为什么我对内部类里的writer测试的结果是null呢?[/quote] 你测试的时候那个writer还没有赋值呢,自然是null,你是在按钮的点击事件里赋值的,只有点了之后才会有值。。。。执行顺序的问题。
limoxin_ 2018-05-07
  • 打赏
  • 举报
回复
引用 2 楼 qq_27985591 的回复:
writer = new PrintWriter(socket.getOutputStream());//方法里面实例化,局域对象,当方法结束它就不存在了 你这句注释就不对了,你的writer引用是这个SimpleChatClient类的成员变量,只要这个SimpleChatClient类的对象生命周期还在,这个writer就在
首先非常感谢您的回答,那为什么我对内部类里的writer测试的结果是null呢?
monk- 2018-05-07
  • 打赏
  • 举报
回复
writer = new PrintWriter(socket.getOutputStream());//方法里面实例化,局域对象,当方法结束它就不存在了 你这句注释就不对了,你的writer引用是这个SimpleChatClient类的成员变量,只要这个SimpleChatClient类的对象生命周期还在,这个writer就在
limoxin_ 2018-05-06
  • 打赏
  • 举报
回复
代码排版怎么变了。。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧