Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:来自其他类的布尔值不更改值/if语句不工作_Java - Fatal编程技术网

Java:来自其他类的布尔值不更改值/if语句不工作

Java:来自其他类的布尔值不更改值/if语句不工作,java,Java,所以我创建了一个名为“Homescreen”的类的对象,它是未定义的。单击按钮后,对象被初始化,线程开始检查布尔值“ScanForSpywares”是否为真。如果为true,则执行特定任务。默认情况下,布尔值为false,单击后通过按钮将其设置为true Thread liveCheck = new Thread(new Runnable(){ @Override public synchronized void run(){ while(running){

所以我创建了一个名为“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);
}}

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

首先确保,
sc
实际上是
主屏幕的同一个实例(在给出的代码片段中不清楚)。其次,将布尔值声明为volatile,以确保第二个线程看到来自主/UI线程的更改。但是,您应该阅读更多关于
volatile
的内容,因为它经常被误用


最后但并非最不重要的一点:由于您的代码以静默方式捕获所有异常,因此您不会注意到任何事情(例如,
serv.LoadMYSQLSettings();
)是否出错。

尝试使ScanForSpywares
volatile
。哈哈,是的,这是一个异常(java.lang.ArrayIndexOutOfBoundsException),我完全忘记了!谢谢你的帮助:“)。我也会尝试让它变得不稳定,了解一些新的东西很好。