kompilator nie wchodzi w ifa w wątku

kompilator nie wchodzi w ifa w wątku
BA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
0

Cześć,
Chodzi o to, że po wstawieniu nowej wartości do bazy chciałabym, żeby pojawiła się ona w combobox'ie (jComboBoxTypLampy). Wywoływana procedura sql zwraca "TAK" jeśli podana wartość nie występowała w bazie i zostaje zapisana lub "NIE" jeśli wartość już istniała i nie zostaje zapisana. Ta część na pewno działa i zwraca oczekiwane wartości.

Problem w tym, ze nawet po zmianie flagi na "TAK" kompilator nie wchodzi w w if(n.flaga){} w poniższym kodzie:

Kopiuj
public  class Tylko_Run implements Runnable
	 {

        @Override
        public void run() {
            boolean flaga1 = true;
            while(flaga1){
            if(n.flaga){
            jComboBoxTypLampy.addItem(n.dany_typ); 
            flaga1 = false;
            jComboBoxTypLampy.repaint();
            System.out.println("dsgs");
            }
            //System.out.println("dsgghfhgs");
            }
        }
    } 

fragment kodu, wywołuje klasę, w której wszystko się dzieje:

Kopiuj
n= new NoweDane1();
        n.setLocationRelativeTo(null);
        n.ustawPolecenie("Podaj nowy typ:");
        
        n.ustawStatus("typ");
        n.setVisible(true);
       (new Thread(new Tylko_Run())).start(); 

oraz klasa:

Kopiuj
 import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;



public class NoweDane1 extends javax.swing.JFrame {

    private JComboBox combobox1;
    public boolean flaga; 
    private MojResultSet mrs;
    
    public NoweDane1() {
        initComponents();
       // combobox1 = combobox;
       flaga = false;
    }
    String procedura;
    String status = "nieokreslony";
    String czy_zapisano =  "NIE";
    String dany_typ = null;
    
    public void ustawPolecenie(String polecenie){
        jLabel1.setText(polecenie);
    }
    
    /*public void ustawProcedure(String procedura){
        this.procedura = procedura;  
    }*/
    public void ustawStatus(String status){
        this.status = status;
    }
    void dodajTyp(){
       
       dany_typ = jTextFieldNowaDana.getText();
       mrs = new MojResultSet();
       
       if ("".equals(dany_typ)){
                JOptionPane.showMessageDialog(this, "Nie podano żadnej wartości. Proszę podać nową wartość.");  
                
        }
        else{
                    
            ResultSet rs = mrs.wybierz("NOWY_TYP", 0, "", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, dany_typ, 0, 0, 0, 0, 0);
            
            try {
                    while(rs.next()){
                        String s = rs.getString("flaga");
                        System.out.println(s);
                        if ("TAK".equals(s))
                            flaga = true;
                        
                    }
                    rs.close();
                    mrs.zamknijCallableStatement();
                    mrs.zamknijPolaczenie();
                } catch (SQLException ex) {
                    Logger.getLogger(NoweDane1.class.getName()).log(Level.SEVERE, null, ex);
                 
                }            
            }
   }
    
   
    
    

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jTextFieldNowaDana = new javax.swing.JTextField();
        jButtonZapiszNowyTyp = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jButtonZapiszNowyTyp.setText("Zapisz");
        jButtonZapiszNowyTyp.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonZapiszNowyTypActionPerformed(evt);
            }
        });

        jButton1.setText("Anuluj");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGap(37, 37, 37)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addGap(86, 86, 86))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jTextFieldNowaDana, javax.swing.GroupLayout.PREFERRED_SIZE, 159, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jButtonZapiszNowyTyp)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton1)
                        .addGap(0, 28, Short.MAX_VALUE))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButtonZapiszNowyTyp)
                    .addComponent(jTextFieldNowaDana, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jButton1))
                .addContainerGap(31, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void jButtonZapiszNowyTypActionPerformed(java.awt.event.ActionEvent evt) {                                                     
    
               
         switch(status){
            case "typ":
                
                dodajTyp();
                 //  if("Zapisano!".equals(mrs.jkomunikat)){
                ///        flaga = true;
                 //   }
                
                
        }
} 


    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButtonZapiszNowyTyp;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JTextField jTextFieldNowaDana;
    // End of variables declaration                   
} 

Czy ktoś może wie czemu tak się dzieje?
Z góry dzięki za odpowiedź

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
1

Nie możesz sobie tak po prostu zmienić wartości z dwóch wątków. Jak definicja wskazuje, wątki wykonywana są naraz, więc może się zdarzyć że wątki będą się chciały odwołać do tych samych zmiennych naraz. Trzeba się przed tym zabezpieczyć, np stosując synchronizowane bloki.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.