незарегистрированное исключение ParseException; должен быть пойман или объявлен брошенным - JAVA Ошибка - PullRequest
0 голосов
/ 28 января 2020

Я создаю Java приложение в JSF, которое делает запрос к API, получает JSON и заполняет таблицу JSON info ...

Это код:

@ManagedBean(name = "logic", eager = true)
@SessionScoped
public class Logic  {

static JSONObject jsonObject = null;
static JSONObject jo = null;
static JSONArray cat = null;


public void connect()  {
    StringBuilder sb = new StringBuilder();
  try {   
 URL url = new URL("xxx");
 URLConnection yc = url.openConnection();
 BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
 String inputLine;

 while((inputLine = in.readLine())!= null){
     System.out.println(inputLine);
     sb.append(inputLine+"\n");
     in.close();

 }






 }catch(Exception e) {System.out.println(e);}

    try {
    JSONParser parser = new JSONParser();

    jsonObject = (JSONObject) parser.parse(sb.toString());
    cat = (JSONArray) jsonObject.get("mesaje");
    jo = (JSONObject) cat.get(0);
    jo.get("cif");

    System.out.println(jo.get("cif"));
    }catch(Exception e){System.out.println(e);}
}




private String cif;



final static private  ArrayList<Logic> logics = new ArrayList<Logic>(Arrays.asList(new Logic(jo.get("cif").toString())));



public ArrayList<Logic> getLogics() {
    return logics;
}

public Logic() {

}

public Logic(String cif) throws ParseException {
    this.cif = cif;
    connect();
}

public String getCif() {
    return cif;
}

public void setCif(String cif) {
    this.cif = cif;
}




}

В строке 67 -> final static private ArrayList<Logic> logics = new ArrayList<Logic>(Arrays.asList(new Logic(jo.get("cif").toString())));

выдает эту ошибку в Netbeans: незарегистрированное исключение ParseException; должен быть пойман или объявлен брошенным. Я попытался окружить его в try catch, но он дает другие ошибки в других частях кода ... что я могу сделать, чтобы я мог запустить приложение?

Заранее спасибо

1 Ответ

1 голос
/ 28 января 2020

Насколько я понимаю, вы пробовали что-то вроде

try {
    final static private  ArrayList<Logic> logics = new ArrayList<Logic>(Arrays.asList(new Logic(jo.get("cif").toString())));
} catch (Exception e) {
    e.printStackTrace();
}

Проблема в том, что строка не внутри метода, и вы не можете использовать try...catch там.

Быстрый способ решить эту проблему - поместить эту инициализацию в static блок

public class Logic {
    final static private  ArrayList<Logic> logics;


    static {
        try {
            logics = new ArrayList<Logic>(Arrays.asList(new Logic(jo.get("cif").toString())));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // rest of your class...
}

Но, честно говоря, я должен задаться вопросом, почему вы объявили logics как static. Это не видно из остальной части вашего кода. Кроме того, я вижу, что у вас есть нестати c getLogics() метод. Поэтому я бы сказал, что если на самом деле нет причин объявлять его как static, просто сделайте его нестати c и инициализируйте его в конструкторе, где вы можете использовать try...catch для своего сердца.

...