void nu poate fi dereferențiat (Programare, Java)

Nathan Kreider a intrebat.

Am o metodă de editare a membrilor și vreau să tipăresc erorile într-un fișier, dar continui să primesc eroarea void cannot be dereferenced dacă încerc să tipăresc urmărirea stivei într-un fișier Error_Report.txt. Există vreo modalitate de a o imprima?Acesta este codul meu.

public void edit() {
  FileWriter fw = new FileWriter(new File("Error_Report.txt"));
  Connection con;
  Statement stmt;
  ResultSet rs;

  int id = (int)_id.getSelectedItem();
  String name = _name.getText();
  String user = _username.getText();
  String pass = _password.getText();
  String pos = _position.getSelectedItem().toString();

  try {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    con = DriverManager.getConnection("jdbc:odbc:collegesys", 
                                      "root", "0blivi0n");

    stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                               ResultSet.CONCUR_READ_ONLY);

    PreparedStatement prep = con.prepareStatement("UPDATE `main` WHERE ID = ?");
    prep.setInt(1, id);
    prep.setString(2, name);
    prep.setString(3, user);
    prep.setString(4, pass);
    prep.setString(5, pos);

    prep.execute();
  } catch(SQLException sqle) {
    String sql = sqle.printStackTrace().toString();
    fw.write("" + sql);
  } catch(ClassNotFoundException cnfe) {
    fw.write("" + cnfe);
  }
}

Comentarii

  • Se pare că doriți să trimiteți un mesaj void ca parametru prin intermediul funcției dvs. și nu puteți face acest lucru. void type înseamnă că nu există un tip. –  > Por Luiggi Mendoza.
  • Postați metoda pentru a putea vedea problema mai clar. În rest, @LuiggiMendoza are dreptate. –  > Por Makoto.
  • Presupun că aceasta este o eroare de compilare? Ce cod o provoacă? –  > Por SirPentor.
2 răspunsuri
Dawood ibn Kareem

Problema ta este că printStackTrace nu returnează nimic, deci nu există nimic de convertit într-un șir de caractere. Scrieți-l astfel.

PrintWriter writer = new PrintWriter(fw);
sqle.printStackTrace(writer);
writer.close();

Luiggi Mendoza

sqle.printStackTrace() returnează un void și nu poate fi folosit ca parametru. Schimbați-vă codul în ceva de genul acesta:

catch(SQLException sqle) {
    StringBuilder sb = new StringBuilder();
    StackTraceElement[] st = sqle.getStackTrace();
    for(StackTraceElement s : st) {
        sb.append(s);
        sb.append('
');
    }
    fw.write(sb.toString());
} 

Comentarii

  • Bine, am implementat acest lucru, iar acum primesc spam cu erori IOException. Cum aș putea implementa un try catch în interiorul unui catch()? –  > Por Nathan Kreider.
  • @NathanKreider puteți să faceți un cuib try și catch declarații cât de adânc doriți. –  > Por Dawood ibn Kareem.

Tags: