NetBeans开发ChatApp启动Client时重复运行Server问题排查
解决NetBeans中启动Client却运行Server代码的问题
嘿,我来帮你搞定这个头疼的问题!你在NetBeans里开发ChatApp,明明写了Server和Client两个类,但启动Client的时候却跑起了Server的代码,这几乎都是运行配置没选对主类或者操作方式不对导致的,下面给你一步步排查:
一、先确认NetBeans的默认运行主类
NetBeans会记住你最近一次运行的主类,如果你之前先运行了Server,它就会把Server设成项目的默认主类,之后直接点项目的运行按钮,就会重复跑Server的代码。解决方法很简单:
- 右键你的项目(在左侧项目面板里),选择「属性」
- 在弹出的窗口里切换到「运行」标签页
- 在「主类」的下拉菜单里,找到并选中
ChatAppClient,点击「确定」 - 之后再运行项目,就会默认启动Client的代码了
二、直接运行单个Client文件
如果不想修改默认主类,也可以直接指定运行Client.java:
- 在左侧项目面板里找到
ChatAppClient.java文件(就是你创建的那个Client类) - 右键这个文件,选择「运行文件」
- 这样NetBeans就会专门编译并执行这个类里的
main方法,不会再跑Server的代码
三、你的代码小提醒(非当前问题核心,但值得注意)
看了你的代码,Client类里导入了Server的静态flag变量:import static chatappAll.ChatAppServer.flag;,虽然这不会直接导致运行错类,但要注意静态变量是全局共享的,如果你多次运行Server/Client,可能会有状态残留的问题,后续开发可以留意这点。
附上你的代码:
Server代码
public class ChatAppServer extends JFrame{ private int portNumber; public static int flag = 0; public ChatAppServer(){ askPortNum(); createServer(); } void askPortNum(){ // use flag to check if this was already asked if(flag == 0){ try{ // save input to variable portNumber = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter a port number", "Port Number", JOptionPane.INFORMATION_MESSAGE)); // change flag to 1 flag = 1; // call buildGUI buildGUI(); }catch(NumberFormatException numFor){ // set variable number value portNumber = 9999; // pop message letting the user know JOptionPane.showMessageDialog(null, "Number expected. Using port " + portNumber, "Invalid Entry", JOptionPane.INFORMATION_MESSAGE); buildGUI(); }catch(Exception e){ portNumber = 9999; // pop message letting the user know JOptionPane.showMessageDialog(null, "Not valid port number. Using port " + portNumber, "Invalid Entry", JOptionPane.INFORMATION_MESSAGE); buildGUI(); } } } public static void main(String[] args) { new ChatAppServer(); } }
Client代码
import static chatappAll.ChatAppServer.flag; public class ChatAppClient extends JFrame{ // message section private JScrollPane dmScrollPane; private JTextArea messageArea; // user section private JScrollPane utScrollPane; private JTextArea userTextArea; public ChatAppClient(){ askPortNum(); } void askPortNum(){ if(flag == 1){ System.out.println("looks good"); } } public static void main(String[] args){ new ChatAppClient(); } }
你的项目文件结构:

内容的提问来源于stack exchange,提问作者Henity
相关产品推荐
相关产品推荐

