2016-10-19 1 views
-1

Je veux afficher dans mon JTextArea (ConsoleTxt) tous les Printlns de mon autre classe. Je l'ai déjà mis une référence de classe GUI dans l'autre classe, mais cette erreur apparaît: Exception dans le thread "AWT-EventQueue-0" java.lang.NullPointerException »Java/Swing - Comment accéder JTextArea d'une autre classe

Il est mon code GUI:

package Execucao; 

import static java.lang.Thread.sleep; 
import java.util.ArrayList; 
import javax.swing.JLabel; 
import javax.swing.JTextArea; 
import javax.swing.table.DefaultTableCellRenderer; 
import javax.swing.table.DefaultTableModel; 


public class Interface extends javax.swing.JFrame { 

int pc = 0, opCode, op1, op2, rx, ry; 
String iR; 
int endereço = 0; 
ArrayList<String> mem = new ArrayList<String>(); 


MemoryTable mCard = new MemoryTable(); 
UnidadeBusca b = new UnidadeBusca(); 
Decodificador dec = new Decodificador(); 
Registradores r = new Registradores(); 
Ula ula = new Ula(); 
MovimentoDados dFluxo = new MovimentoDados(); 
/** 
* Creates new form Interface 
*/ 

public Interface(JTextArea ConsoleTxt) { 
    this.ConsoleTxt = ConsoleTxt; 
} 

public Interface() {   

    this.endereço = endereço; 
    initComponents(); 
    Op1Txt.setDocument(new LimDigit(6)); 
    Op2Txt.setDocument(new LimDigit(6)); 



public int executar() { 
    append("Memória:"); 
    for(int i = 0; i < mem.size(); i++) {    
     String palavra = mem.get(i); 
     append("|"+ palavra + "|"); 
    } 

    while (pc < mem.size()){ 

     append("\nIniciando busca..."); 
     b.buscar(pc, mem);   
     iR = b.getiR(); 
     append("\nA palavra de endereço "+ pc +" é: "+ iR+"."); 

     append("\nDecodificando palavra..."); 
     dec.decodificar(pc, iR); 

     opCode = dec.getOperacao(); 
     op1 = dec.getOp1(); 
     op2 = dec.getOp2(); 

     append("\nCarregando valor do Operando 1 em Rx..."); 
     r.armazenarDado(op1);   
     rx = r.getRx(); 
     if (dec.decodId() == 0){ 
      append("\nCarregando valor do Operando 2 em Ry..."); 
      r.armazenarDado(op2); 
      ry = r.getRy(); 
      append("\nExecutando Instrução..."); 
      ula.executarOp(opCode, rx, ry); 
      dFluxo.executarOp(opCode, rx, ry); 
     } 
     else{ 
      append("\nExecutando Instrução..."); 
    ula.executarOp(opCode, rx, op2); 
    dFluxo.executarOp(opCode, rx, op2); 
     } 

     r.zerarBanco(); 
     if (opCode == 6) 
      pc = dFluxo.getPc(); 
     else 
    pc++; 
} 
    return 0; 
} 


private void jBAdicionarActionPerformed(java.awt.event.ActionEvent evt) {            
    String OpCod = OpCodeTxt.getText(); 
    String Op1 = Op1Txt.getText(); 
    String OpId = Op2IdTxt.getText(); 
    String Op2 = Op2Txt.getText(); 
    String palavra = OpCod.concat(Op1).concat(OpId).concat(Op2); 
    Object[] linha = {endereço, palavra}; 


    DefaultTableModel model = (DefaultTableModel) jTMemoria.getModel(); 

    endereço++; 
    mem.add(palavra); 
    model.addRow(linha); 
}           

private void jRNotActionPerformed(java.awt.event.ActionEvent evt) {          
    if (jRNot.isSelected()) 
     OpCodeTxt.setText("000"); 
}          

private void jRAndActionPerformed(java.awt.event.ActionEvent evt) {          
    if (jRAnd.isSelected()) 
     OpCodeTxt.setText("001"); 
}          

private void jRAddActionPerformed(java.awt.event.ActionEvent evt) {          
    if (jRAdd.isSelected()) 
     OpCodeTxt.setText("010"); 
}          

private void jRSubActionPerformed(java.awt.event.ActionEvent evt) {          
    if (jRSub.isSelected()) 
     OpCodeTxt.setText("011"); 
}          

private void jRMovActionPerformed(java.awt.event.ActionEvent evt) {          
    if (jRMov.isSelected()) 
     OpCodeTxt.setText("100"); 
}          

private void jRJmpActionPerformed(java.awt.event.ActionEvent evt) {          
    if (jRJmp.isSelected()) 
     OpCodeTxt.setText("101"); 
}          

private void OpCodeTxtActionPerformed(java.awt.event.ActionEvent evt) {           
    // TODO add your handling code here: 
}           

private void Op1TxtActionPerformed(java.awt.event.ActionEvent evt) {          

}          

private void jRHaltActionPerformed(java.awt.event.ActionEvent evt) {          
    if (jRHalt.isSelected()) 
     OpCodeTxt.setText("110"); 
}          

private void jBCompilarActionPerformed(java.awt.event.ActionEvent evt) {           
    executar(); 
}           

private void jRRegActionPerformed(java.awt.event.ActionEvent evt) {          
    if (jRReg.isSelected()) 
     Op2IdTxt.setText("0"); 
}          

private void jRImediatoActionPerformed(java.awt.event.ActionEvent evt) {           
    if (jRImediato.isSelected()) 
     Op2IdTxt.setText("1"); 
}           

public void append(String str){ 
    ConsoleTxt.append(str + "\n"); 
} 

private void bTesteActionPerformed(java.awt.event.ActionEvent evt) {          
    String address = Integer.toString(jTMemoria.getRowCount()); 
    ConsoleTxt.setText(""); 
}          

public void setEndereço(int endereço) { 
    this.endereço = endereço; 
} 

public int getEndereço() { 
    return endereço; 
} 

public void setConsoleTxt(JTextArea ConsoleTxt){ 
    this.ConsoleTxt = ConsoleTxt; 
} 

public JTextArea getConsoleTxt(){ 
    return ConsoleTxt; 
} 

/** 
* @param args the command line arguments 
*/ 
public static void main(String args[]) { 
    /* Set the Nimbus look and feel */ 
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
    * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
    */ 
    try { 
     for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
      if ("Nimbus".equals(info.getName())) { 
       javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
       break; 
      } 
     } 
    } catch (ClassNotFoundException ex) { 
     java.util.logging.Logger.getLogger(Interface.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (InstantiationException ex) { 
     java.util.logging.Logger.getLogger(Interface.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (IllegalAccessException ex) { 
     java.util.logging.Logger.getLogger(Interface.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
     java.util.logging.Logger.getLogger(Interface.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
    } 
    //</editor-fold> 

    /* Create and display the form */ 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      Interface gui = new Interface(); 
      new Interface().setVisible(true); 
     } 
    }); 
} 

// Variables declaration - do not modify      
private javax.swing.JTextArea ConsoleTxt; 
private javax.swing.JTextField Op1Txt; 
private javax.swing.JTextField Op2IdTxt; 
private javax.swing.JTextField Op2Txt; 
private javax.swing.JTextField OpCodeTxt; 
private javax.swing.JButton bTeste; 
private javax.swing.ButtonGroup buttonGroup1; 
private javax.swing.ButtonGroup buttonGroup2; 
private javax.swing.JButton jBAdicionar; 
private javax.swing.JButton jBCompilar; 
private javax.swing.JButton jBRemove; 
private javax.swing.JLabel jLabel1; 
private javax.swing.JLabel jLabel2; 
private javax.swing.JLabel jLabel3; 
private javax.swing.JLabel jLabel4; 
private javax.swing.JLabel jLabel5; 
private javax.swing.JMenu jMenu1; 
private javax.swing.JMenuBar jMenuBar1; 
private javax.swing.JPanel jPanel1; 
private javax.swing.JRadioButton jRAdd; 
private javax.swing.JRadioButton jRAnd; 
private javax.swing.JRadioButton jRHalt; 
private javax.swing.JRadioButton jRImediato; 
private javax.swing.JRadioButton jRJmp; 
private javax.swing.JRadioButton jRMov; 
private javax.swing.JRadioButton jRNot; 
private javax.swing.JRadioButton jRReg; 
private javax.swing.JRadioButton jRSub; 
private javax.swing.JScrollPane jScrollPane1; 
private javax.swing.JScrollPane jScrollPane2; 
private javax.swing.JTable jTMemoria; 
// End of variables declaration     

}

Et il est de mon code de classe:

package Execucao; 

import java.util.Scanner; 
import javax.swing.JTextArea; 

public class Decodificador { 
    Scanner enter = new Scanner(System.in); 

private int maskInst, maskRM, maskOp1, maskOp2, operacao, op1, op2, idOp2, opId, tipOp2, imediato, numDec; 
String X, Y, TipOp2; 

    private Interface w; 

public Decodificador() 
{} 

public Decodificador (int op1, int op2, int idOp2, int operacao, int opId, int numDec, Interface gui) { 
    this.op1 = op1; 
    this.op2 = op2; 
    this.idOp2 = idOp2; 
    this.operacao = operacao; 
    this.opId = opId; 
    this.numDec = numDec; 
      w = gui; 
    } 

public int decodId() { 

    idOp2 = ((numDec & maskRM) >> 6); 

    switch(idOp2) { 
    case 0: 
     TipOp2 = "ry"; 
     tipOp2 = 0; 
     break; 
    case 1: imediato = op2; 
     TipOp2 = "imediato"; 
     tipOp2 = 1; 
     break; 
    } 
    return tipOp2; 
} 


public int decodificar(int pc, String iR){ 
    numDec = 0; 
    int j; 
    int k = 0; 

    for(j = 15; j >= 0; j--) { 
     if (iR.charAt(j) == '1') 
      numDec += Math.pow(2, k); 
     k++; 
    } 
      System.out.println("Palavra "+(pc)+" convertida para decimal: "+ numDec + "."); 
      w.append("Palavra "+(pc)+" convertida para decimal: "+ numDec + "."); 

    maskInst = 0b1110000000000000; 
    maskRM = 0b0000000001000000; 
    maskOp1 = 0b0001111110000000; 
    maskOp2 = 0b0000000000111111; 


    operacao = ((numDec & maskInst) >> 13); 
    op1 = ((numDec & maskOp1) >> 7); 
    op2 = (numDec & maskOp2); 

    System.out.println("MASCARA DA OPERA��O:("+numDec+" & "+ maskInst +"): "+operacao+ "."); 
    System.out.println("MASCARA DO OPERANDO 1:("+numDec+" & "+ maskOp1 +"): "+op1+ "."); 
    System.out.println("MASCARA DO OPERANDO 2:("+numDec+" & "+ maskOp2 +"): "+op2+ "."); 


    switch(operacao){ 
     case 0: 
      X = "lógica"; 
      Y = "NOT"; 
      break; 
     case 1: 
      X = "lógica"; 
      Y = "AND"; 
      break; 
     case 2: 
      X = "aritmética"; 
      Y = "ADD"; 
      break; 
     case 3: 
      X = "aritmética"; 
      Y = "SUB"; 
      break; 
     case 4: 
      X = "de desvio de fluxo"; 
      Y = "MOV"; 
      break; 
     case 5: 
      X = "de desvio de fluxo"; 
      Y = "JMP"; 
      break; 
        case 6: 
          X = "de desvio de fluxo"; 
      Y = "HTL"; 
      break; 
    } 

    decodId(); 
    System.out.println("Operação "+ X + " " + Y +" com operando(s): " + op1 + "(rx) e " + op2 + "("+TipOp2+")."); 
    return 0; 
} 

public int getOperacao() { 
    return operacao; 
} 

public void setOperacao(int operacao) { 
    this.operacao = operacao; 
} 

public int getOp1() { 
    return op1; 
} 

public void setOp1(int op1) { 
    this.op1 = op1; 
} 

public int getOp2() { 
    return op2; 
} 

public void setOp2(int op2) { 
    this.op2 = op2; 
} 

public int getIdOp2() { 
    return idOp2; 
} 

public void setIdOp2(int idOp2) { 
    this.idOp2 = idOp2; 
} 

public int getNumDec() { 
    return numDec; 
} 

public void setNumDec(int numDec) { 
    this.numDec = numDec; 
} 

public int getOpId() { 
    return opId; 
} 

public void setOpId(int opId) { 
    this.opId = opId; 
} 

erreur:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at Execucao.Decodificador.decodificar(Decodificador.java:56) 
at Execucao.Interface.executar(Interface.java:80) 
at Execucao.Interface.jBCompilarActionPerformed(Interface.java:531) 
at Execucao.Interface.access$1300(Interface.java:19) 
at Execucao.Interface$15.actionPerformed(Interface.java:411) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
at java.awt.Component.processMouseEvent(Component.java:6535) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) 
at java.awt.Component.processEvent(Component.java:6300) 
at java.awt.Container.processEvent(Container.java:2236) 
at java.awt.Component.dispatchEventImpl(Component.java:4891) 
at java.awt.Container.dispatchEventImpl(Container.java:2294) 
at java.awt.Component.dispatchEvent(Component.java:4713) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) 
at java.awt.Container.dispatchEventImpl(Container.java:2280) 
at java.awt.Window.dispatchEventImpl(Window.java:2750) 
at java.awt.Component.dispatchEvent(Component.java:4713) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) 
at java.awt.EventQueue.access$500(EventQueue.java:97) 
at java.awt.EventQueue$3.run(EventQueue.java:709) 
at java.awt.EventQueue$3.run(EventQueue.java:703) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) 
at java.awt.EventQueue$4.run(EventQueue.java:731) 
at java.awt.EventQueue$4.run(EventQueue.java:729) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 

Pourriez-vous, s'il vous plaît, m'a aider?

+0

Pourriez-vous s'il vous plaît nous montrer la stacktrace complète de l'exception? –

+1

_ "Comment accéder à JTextArea depuis une autre classe" _ Vous ne le faites pas. Crée une classe de modèle (un DTO). passez une instance de cette classe modèle en tant que paramètre constructeur à la classe ayant TextFiled et à toute autre classe intéressée par cette valeur. –

+2

1) Voir [Qu'est-ce qu'une trace de pile, et comment puis-je l'utiliser pour déboguer mes erreurs d'application?] (Http://stackoverflow.com/q/3988788/418556) & [Qu'est-ce qu'une exception Null Pointer, et comment est-ce que je le répare?] (http://stackoverflow.com/q/218384/418556) 2) Voir [Détection/correction pour le crochet de fermeture d'un bloc de code] (http://meta.stackexchange.com/q/251795/155831) pour un problème que je ne pourrais plus être dérangé de réparer. –

Répondre

0

rapide et sale comme l'a demandé:

public class TextFieldTest { 
    static class Dto { 
     private final SimpleStringProperty someStringProperty = new SimpleStringProperty(); 

     public SimpleStringProperty someStringProperty() { 
      return someStringProperty; 
     } 

    } 

    static class StringProvider { 
     private final Dto dto; 

     public StringProvider(Dto dto) { 
      this.dto = dto; 
     } 

     public void requestInput() { 
      JTextField jTextField = new JTextField(); 
      JOptionPane.showMessageDialog(null, jTextField); 
      dto.someStringProperty().set(jTextField.getText()); 
     } 
    } 

    static class StringConsumer { 
     private final Dto dto; 

     public StringConsumer(Dto dto) { 
      this.dto = dto; 
      dto.someStringProperty 
        .addListener((ChangeListener<String>) (arg0, arg1, newString) -> System.out.println(newString)); 
     } 

     @Override 
     public String toString() { 
      return "StringConsumer [string=" 
        + dto.someStringProperty.get() 
        + "]"; 
     } 
    } 

    public static void main(String[] args) { 
     Dto theModel = new Dto(); 
     StringConsumer stringConsumer = new StringConsumer(theModel); 
     System.out.println(stringConsumer.toString()); 

     StringProvider stringProvider = new StringProvider(theModel); 
     stringProvider.requestInput(); 
     System.out.println(stringConsumer.toString()); 
    } 
}