Java 为什么布尔比较不能正常工作?

Java 为什么布尔比较不能正常工作?,java,debugging,netty,Java,Debugging,Netty,因此,我正在与Netty合作,试图让一个简单的客户端通过TCP连接到服务器,但遇到了一个非常奇怪、不寻常的问题。我正在尝试连接,无论何时连接,客户端都会断开连接。我调试了客户端,遇到了这个奇怪的问题,你可以在图片中看到。在Netty包含的ClientBootstrap类中,如果在上面的try/catch中将success设置为true,它将关闭通道。正如您在调试变量中所看到的,变量success设置为true,但它通过上面的if语句,只有在success为false时才会继续。这有什么意义?我已

因此,我正在与Netty合作,试图让一个简单的客户端通过TCP连接到服务器,但遇到了一个非常奇怪、不寻常的问题。我正在尝试连接,无论何时连接,客户端都会断开连接。我调试了客户端,遇到了这个奇怪的问题,你可以在图片中看到。在Netty包含的ClientBootstrap类中,如果在上面的try/catch中将success设置为true,它将关闭通道。正如您在调试变量中所看到的,变量success设置为true,但它通过上面的if语句,只有在success为false时才会继续。这有什么意义?我已经调试了它,成功在if语句上方设置为true,然后在if语句之后转到if语句。如果有人有解释那就太好了

在Netty包含的ClientBootstrap类中,如果在上面的try/catch中将success设置为true,它将关闭通道

不,没有。那是因为否定(
)。如果其旁边的表达式为
false
,则布尔求反返回
true
,反之亦然

你说:

if(!success)

现在,仅当您的程序到达了到达try的最后一行时,才将
success
设置为
true
。如果不是,这意味着出了问题——可能是频道出了问题——现在你要关闭这个有问题的频道。因此,它的作用与您希望它做的相反。

@Shahzeb这是一个
!成功
。。。所以
success
应该是
false
。是否存在
异常
?请在
ch.close()
之前尝试
System.out.println(success)
,可能您的IDE正在调试不同(较旧)版本的代码,并且调试时突出显示的行是错误的。img是否有什么原因使传输其不可能或意义不大的信息?谈论难以阅读的内容…熟悉Eclispe调试的人会理解它。实际上,您只看到以绿色突出显示的代码和右上角带有值的变量“success”。无论如何,我不太确定问题是什么,但这似乎是我的问题。它在某个点工作,然后“神奇地”停止。我会把这些库搞得一团糟,看看能不能修好。请用文本而不是图片提供源代码。我想你误解了。成功的价值被设定为真。这意味着“if(!success)”只有在success=false时才是真的,而事实并非如此。该语句没有将其设置为true。这只是一个条件语句。变量success在其上方的第二行设置为true。所以这甚至不是一个有效的答案。我想你是糊涂了@COMMUSOFT显然否定不设置
success
的值。然而,如果您不提供源代码的(更广泛的版本),调试就很困难。小心调试器。有时他们会运行你的程序的旧版本,从而突出显示/分析不同的代码。这不是我写的代码。它是由Netty的开发人员编写的,这是一个奇怪的部分,因为它被很多人使用,对其他人来说不是问题。在第198行:@baseball435:重新启动调试器没有帮助。有时调试器倾向于混合两个会话。是的,我知道,我找不到任何解决方案。