java.lang.ClassCastException: java.lang.La chaîne ne peut pas être lancé à java.lang.Long
J'ai créé ce simple exemple qui est utilisé pour lire Linux disponibilité:
public String getMachineUptime() throws IOException {
String[] dic = readData().split(" ");
long s = (long) Array.get(dic, 1);
return calculateTime(s);
}
private String readData() throws IOException {
byte[] fileBytes;
File myFile = new File("/proc/uptime");
if (myFile.exists()) {
try {
fileBytes = Files.readAllBytes(myFile.toPath());
} catch (java.nio.file.AccessDeniedException e) {
return null;
}
if (fileBytes.length > 0) {
return new String(fileBytes);
}
}
return null;
}
private String calculateTime(long seconds) {
int day = (int) TimeUnit.SECONDS.toDays(seconds);
long hours = TimeUnit.SECONDS.toHours(seconds)
- TimeUnit.DAYS.toHours(day);
long minute = TimeUnit.SECONDS.toMinutes(seconds)
- TimeUnit.DAYS.toMinutes(day)
- TimeUnit.HOURS.toMinutes(hours);
long second = TimeUnit.SECONDS.toSeconds(seconds)
- TimeUnit.DAYS.toSeconds(day)
- TimeUnit.HOURS.toSeconds(hours)
- TimeUnit.MINUTES.toSeconds(minute);
return "Day " + day + " Hour " + hours + " Minute " + minute
+ " Seconds " + second;
}
Lorsque j'exécute le code, j'obtiens cette exception:
java.lang.ClassCastException: java.lang.La chaîne ne peut pas être lancé à java.lang.Long
Est-il un autre moyen pour convertir le résultat?
- de cette ligne .long s = (long) Tableau.get(dic, 1);
- Pouvez-vous m'aider à résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
Je crois que vous devez remplacer
avec
ou encore mieux:
La raison en est que votre tableau est constitué de
String
objet, et direct casting ne fonctionne pas.long
maisdouble
. 🙂Le problème semble être dans la ligne suivante:
L'obtenir(un Objet array, int index) méthode de java.lang.de réfléchir.Tableau renvoie une instance de l'Objet, qui ne peut pas être directement convertie à la longue.
Vous pouvez accéder à l'élément de la matrice simplement par dic[1] au lieu de Tableau.get(dic, 1)
Remplacer par le code suivant: