У меня такое поведение, которое я не могу понять.Код прекрасно работает на Win10, но выдает ошибку InputMismatchException на MacOS.Он прерывается при попытке вызвать nextDouble () или nextInt ().
Вызов сделан из этого метода:
public void readVehicleData()
{
Frame frame = null;
FileDialog fileBox = new FileDialog(frame, "Open", FileDialog.LOAD);
fileBox.setDirectory(".");
fileBox.setVisible(true);
String fileName = fileBox.getDirectory()+fileBox.getFile();
try
{
File dataFile = new File(fileName);
Scanner scanner = new Scanner(dataFile);
while(scanner.hasNextLine())
{
String lineOfText = scanner.nextLine().trim();
if (!lineOfText.startsWith("//") && !lineOfText.isEmpty() && !lineOfText.startsWith("["))
{
Scanner strScanner = new Scanner(lineOfText).useDelimiter("\\s*[,\n]\\s*");
Vehicle vehicle = new Vehicle();
if(strScanner.hasNext())
{
vehicle.readData(strScanner);
vehicleList.add(vehicle);
strScanner.nextLine();
}
strScanner.close();
}
}
if(scanner.hasNextLine())
{
scanner.nextLine();
}
scanner.close();
}
catch(FileNotFoundException ex)
{
System.err.println(ex.getMessage());
System.err.println(ex.getCause());
ex.printStackTrace();
System.err.println("File " + fileName + " not found");
fileName = null;
}
Ошибка возникает при чтении «vehicle.readData (strScanner)", который выглядит так:
public void readData(Scanner strScanner)
{
group = strScanner.next();
vehID = strScanner.next();
regNo = strScanner.next();
make = strScanner.next();
model = strScanner.next();
String strAirCon = strScanner.next();
airCon = strAirCon.equalsIgnoreCase("Yes") == true ? true : false;
// It throws an InputMismatchException error here
engineSize = strScanner.nextDouble();
fuelType = strScanner.next();
gearbox = strScanner.next();
transmission = strScanner.next();
// It also throws an InputMismatchException error here
// if the previous variables are commented
mileage = strScanner.nextInt();
dateFirstRegistered = strScanner.next();
}
Вот ошибки, которые я получаю:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextDouble(Scanner.java:2413)
at vehicleproject.Vehicle.readData(Vehicle.java:121)
at vehicleproject.ReservationSystem.readVehicleData(ReservationSystem.java:65)
at vehicleproject.Main.main(Main.java:10)
Я, очевидно, провел свое исследование, но не могу найти никакого решения для этого.Он работает без проблем на Win10, но не на MacOS.
Кто-нибудь сталкивался с подобной ошибкой в MacOS?
Это пример данных, которые мне нужно прочитать:
[Данные автомобиля]
// данные - это группа, VehID, RegNo, марка, модель, AirCon или климат-контроль, размер двигателя (литры), тип топлива, коробка передач, трансмиссия, пробег, дата первой регистрации, тип кузова, количество дверей, количество мест
AA, TF-63403, MJ09TFE, Fiat, Panda Active Eco, № 1.1, неэтилированный, пятиступенчатая механическая коробка передач, FWD, 13584, 29-07-2009, хэтчбек, 5, 5 A, TF-61273, MJ09TFD, Fiat, Grande Punto Active, № 1.4, неэтилированный, пятиступенчатая механическая коробка передач, FWD, 14278, 12-05-2009, хэтчбек, 3, 5
Это один из классов:
import java.util.*;
import java.awt.*;
import java.io.*;
public class Vehicle
{
private String group, vehID, regNo, make;
private String model, fuelType, gearbox, transmission, dateFirstRegistered;
private boolean airCon;
private double engineSize;
private int mileage;
public Vehicle()
{
group = null;
vehID = null;
regNo = null;
make = null;
model = null;
airCon = false;
engineSize = 0.0;
fuelType = null;
gearbox = null;
transmission = null;
mileage = 0;
dateFirstRegistered = null;
}
public String getGroup()
{
return group;
}
public void setGroup(String newGroup)
{
group = newGroup;
}
public String getVehicleID()
{
return vehID;
}
public void setVehicleID(String newVehID)
{
vehID = newVehID;
}
public String getRegistrationNo()
{
return regNo;
}
public void setRegistrationNo(String newRegNo)
{
regNo = newRegNo;
}
public String getMake()
{
return make;
}
public void setMake(String newMake)
{
make = newMake;
}
public String getModel()
{
return model;
}
public void setModel(String newModel)
{
model = newModel;
}
public boolean getAirCon()
{
return airCon;
}
private String checkAirCon()
{
String output;
return output = getAirCon() == true ? "Yes" : "No";
}
public void printDetails()
{
System.out.println(make + " " + model + " Group: " + group + " Vehicle Id: " + vehID);
System.out.println("Air conditioning / Climate control: " + checkAirCon());
System.out.println("Engine Size: " + engineSize + " Fuel: " + fuelType);
System.out.println("Gearbox: " + gearbox + " Transmission: " + transmission);
System.out.println("Mileage: " + mileage + " Date first registered: " + dateFirstRegistered);
System.out.println();
}
public void readData(Scanner strScanner)
{
group = strScanner.next();
vehID = strScanner.next();
regNo = strScanner.next();
make = strScanner.next();
model = strScanner.next();
//System.out.println(model);
String strAirCon = strScanner.next();
airCon = strAirCon.equalsIgnoreCase("Yes") == true ? true : false;
engineSize = strScanner.nextDouble();
//System.out.println(engineSize);
fuelType = strScanner.next();
gearbox = strScanner.next();
transmission = strScanner.next();
mileage = strScanner.nextInt();
//System.out.println(mileage);
dateFirstRegistered = strScanner.next();
}
}