所以我创建了一个名为" Homescreen"的类的对象。这是未定义的。单击按钮后,对象被初始化,线程开始检查布尔' ScanForSpywares'是真还是假。如果为true,则执行某项任务。默认情况下,布尔值为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);
}}
答案 0 :(得分:1)
这里有一些奇怪的事情,所有这些都是可能的原因。
首先确保sc
实际上是HomeScreen
的同一个实例(从给出的片段中看不清楚)。其次,将布尔值声明为volatile
,以确保第二个线程看到来自主/ UI线程的更改。但是,您应该阅读更多关于volatile
的内容,通常会误用。
最后但并非最不重要:由于您的代码会静默捕获所有异常,因此您不会注意到是否有任何错误(例如serv.LoadMYSQLSettings();
)出错。