好的......我是java新手,这是我的第一个应用程序。我正在组装一个java套接字应用程序。连接后,它会更改" Connect"的按钮标签。到"断开"。如果button label = disconnect,则socket.close。不确定为什么它没有关闭。是因为它是私人的吗?我知道可能有更好的方法来确定插座是否打开等。但我真的是第一个,试图理解为什么以下不工作。任何帮助,将不胜感激。谢谢!
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
Socket s = new Socket();
String host = jTextField1.getText();
double d = Double.parseDouble(jTextField2.getText());
int port = (int) d;
if (jLabel4.getText() == "Disconnected") {
try {
s.connect(new InetSocketAddress(host, port), 60);
jLabel4.setText("Connected");
jButton1.setText("Disconnect");
} catch (IOException ex) {
Logger.getLogger(SARP_UI.class.getName()).log(Level.SEVERE, null, ex);
}
} else {
try {
s.close();
jLabel4.setText("Disconnected");
jButton1.setText("Connect");
} catch (IOException ex) {
Logger.getLogger(SARP_UI.class.getName()).log(Level.SEVERE, null, ex);
}
}
答案 0 :(得分:2)
我无法理解你的程序应该如何工作。套接字s
是操作处理程序的本地,因此要么连接新分配的套接字,要么关闭从未使用过的套接字。我认为你应该重新访问你的程序并将套接字保存为某个对象的字段,这样你就可以查询它的state并相应地操作程序的当前状态和来自GUI的用户请求。
另请注意,字符串应与Object.equals()
进行比较,而不是与==
进行比较,因为==
检查对象标识并且对于运行时检查是不可靠的(即使有时它在参数为编译时常量或实习字符串)。
此外,您的程序应该保留一个内部布尔标志,而不是检查标签的值(例如,如果这是一个真正的应用程序并且您添加了翻译?)
答案 1 :(得分:0)
这可能是因为String
比较
试试
if(jLabel4.getText().equals("Disconnected"))
如果这不能解决您的问题,请保留一个表示已连接或未连接的boolean
,而不是从标签中读取字符串。
如
boolean connected;
\\ something
if(connected)
\\ do this
else
\\do that
编辑:此外,您应该在类范围内创建套接字。它必须是集体成员。