gpt4 book ai didi

Java:来自其他类的 boolean 值未更改值/if 语句不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 06:40:38 26 4
gpt4 key购买 nike

所以我创建了一个名为“Homescreen”的类的对象,该类未定义。单击按钮后,对象将被初始化,并且线程开始检查 boolean 值“ScanForSpywares”是 true 还是 false。如果为真,则执行特定任务。 boolean 值默认为 false,单击按钮后将其设置为 true。

Thread liveCheck = new Thread(new Runnable(){
@Override
public synchronized void run(){
while(running){
try{
if(serv.connection!=null){
if(serv.connection.isClosed()){
btnDisconnect.setEnabled(false);
btnConnect.setEnabled(true);
}else if(!serv.connection.isClosed()){
btnConnect.setEnabled(false);
btnDisconnect.setEnabled(true);
}
}else{
btnDisconnect.setEnabled(false);
}

if(isHome){
btnHome.setEnabled(false);
}else if(!isHome){
btnHome.setEnabled(true);
}
/* THIS IS THE PROBLEM (THE ONE BELOW) */
if(sc!=null){
// The code works fine till here
if(sc.ScanForSpywares){
serv.LoadMYSQLSettings();
System.out.println("works");
sc.ScanForSpywares=false;
}
}

}catch(Exception e){

}
}
}
});

这是另一个类的代码。一切正常,但当我单击“扫描”按钮时,没有任何反应。所以我尝试打印一条简单的消息,结果发现它甚至没有打印到那里。知道这可能是什么......我已经工作了很长时间,所以可能是一个我的大脑无法检测到的愚蠢问题:/

public class HomeScreen extends JFrame {

private JPanel contentPane;
public JList list;
public DefaultListModel model = new DefaultListModel();
public boolean ScanForSpywares = false;

public HomeScreen() {
setResizable(false);
setTitle("Spyware Interface");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 699, 399);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

JLabel lblFrtzfoxy = new JLabel("FrtzFoxy");
lblFrtzfoxy.setForeground(new Color(30, 144, 255));
lblFrtzfoxy.setFont(new Font("Tahoma", Font.PLAIN, 39));
lblFrtzfoxy.setBounds(10, 11, 168, 41);
contentPane.add(lblFrtzfoxy);

JLabel lblCyberIntelligence = new JLabel("Cyber Intelligence Corporation");
lblCyberIntelligence.setForeground(new Color(0, 0, 255));
lblCyberIntelligence.setFont(new Font("Tahoma", Font.PLAIN, 10));
lblCyberIntelligence.setBounds(12, 47, 141, 14);
contentPane.add(lblCyberIntelligence);

ScrollPane scrollPane = new ScrollPane();
scrollPane.setBounds(10, 67, 143, 263);
contentPane.add(scrollPane);

list = new JList(model);
scrollPane.add(list);
list.setBounds(329, 223, 1, 1);

JLabel lblActiveNan = new JLabel("Active: NaN");
lblActiveNan.setFont(new Font("Roboto Cn", Font.BOLD, 22));
lblActiveNan.setBounds(10, 330, 143, 34);
contentPane.add(lblActiveNan);

JButton btnScan = new JButton("Scan");
btnScan.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
ScanForSpywares=true;
}
});
btnScan.setBounds(604, 0, 89, 23);
contentPane.add(btnScan);
}}

最佳答案

这里有一些奇怪的事情,所有这些都是可能的原因。

首先确保,sc 实际上是 HomeScreen 的同一个实例(从给出的代码片段中不清楚)。其次,将 boolean 值声明为 volatile ,以确保第二个线程看到来自主/UI 线程的更改。但是,您应该更多地了解 volatile 的作用,它经常被误用。

最后但并非最不重要的一点:由于您的代码默默地捕获所有异常,因此您不会注意到是否有任何问题(即serv.LoadMYSQLSettings();)出错。

关于Java:来自其他类的 boolean 值未更改值/if 语句不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24727059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com