Eclipse Java错误无法解决

时间:2015-05-01 15:24:04

标签: java

我是编程新手,所以请耐心等待。试图从github

设置一些程序
package org.traccar.protocol;

import java.net.SocketAddress;
import java.util.Calendar;
import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandlerContext;

import org.traccar.BaseProtocolDecoder;
import org.traccar.model.Position;

public class Gps103ProtocolDecoder extends BaseProtocolDecoder {

public Gps103ProtocolDecoder(String protocol) {
    super(protocol);
}

private static final Pattern pattern = Pattern.compile(
        "imei:" +
        "(\\d+)," +                         // IMEI
        "([^,]+)," +                        // Alarm
        "(\\d{2})/?(\\d{2})/?(\\d{2})\\s?" + // Local Date
        "(\\d{2}):?(\\d{2})(?:\\d{2})?," +  // Local Time
        "[^,]*," +
        "[FL]," +                           // F - full / L - low
        "(?:(\\d{2})(\\d{2})(\\d{2})\\.(\\d+)|" + // Time UTC (HHMMSS.SSS)
        "(?:\\d{1,5}\\.\\d+))," +
        "([AV])," +                         // Validity
        "(?:([NS]),)?" +
        "(\\d+)(\\d{2}\\.\\d+)," +          // Latitude (DDMM.MMMM)
        "(?:([NS]),)?" +
        "(?:([EW]),)?" +
        "(\\d+)(\\d{2}\\.\\d+)," +          // Longitude (DDDMM.MMMM)
        "(?:([EW])?,)?" +
        "(\\d+\\.?\\d*)?,?" +               // Speed
        "(\\d+\\.?\\d*)?,?" +               // Course
        "(\\d+\\.?\\d*)?,?" +               // Altitude
        "[^,]," +
        "(\\d+)," + // ACC
        "[\\d+)," + // Door
        "(\\d+.?\\d)," + // Oil
        ".*");

@Override
protected Object decode(
        ChannelHandlerContext ctx, Channel channel, SocketAddress remoteAddress, Object msg)
        throws Exception {

    String sentence = (String) msg;

    // Send response #1
    if (sentence.contains("##")) {
        if (channel != null) {
            channel.write("LOAD", remoteAddress);
        }
        return null;
    }

    // Send response #2
    if (sentence.length() == 15 && Character.isDigit(sentence.charAt(0))) {
        if (channel != null) {
            channel.write("ON", remoteAddress);
        }
        return null;
    }

    // Parse message
    Matcher parser = pattern.matcher(sentence);
    if (!parser.matches()) {
        return null;
    }

    // Create new position
    Position position = new Position();
    position.setProtocol(getProtocol());

    Integer index = 1;

    // Get device by IMEI
    if (!identify(parser.group(index++))) {
        return null;
    }
    position.setDeviceId(getDeviceId());

    // Alarm message
    position.set("alarm", parser.group(index++));

    // Date
    Calendar time = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
    time.clear();
    time.set(Calendar.YEAR, 2000 + Integer.valueOf(parser.group(index++)));
    time.set(Calendar.MONTH, Integer.valueOf(parser.group(index++)) - 1);
    time.set(Calendar.DAY_OF_MONTH, Integer.valueOf(parser.group(index++)));

    int localHours = Integer.valueOf(parser.group(index++));
    int localMinutes = Integer.valueOf(parser.group(index++));

    String utcHours = parser.group(index++);
    String utcMinutes = parser.group(index++);

    // Time
    time.set(Calendar.HOUR_OF_DAY, localHours);
    time.set(Calendar.MINUTE, localMinutes);
    String seconds = parser.group(index++);
    if (seconds != null) {
        time.set(Calendar.SECOND, Integer.valueOf(seconds));
    }
    String milliseconds = parser.group(index++);
    if (milliseconds != null) {
        time.set(Calendar.MILLISECOND, Integer.valueOf(milliseconds));
    }

    // Timezone calculation
    if (utcHours != null && utcMinutes != null) {
        int deltaMinutes = (localHours - Integer.valueOf(utcHours)) * 60;
        deltaMinutes += localMinutes - Integer.valueOf(utcMinutes);
        if (deltaMinutes <= -12 * 60) {
            deltaMinutes += 24 * 60;
        } else if (deltaMinutes > 12 * 60) {
            deltaMinutes -= 24 * 60;
        }
        time.add(Calendar.MINUTE, -deltaMinutes);
    }
    position.setTime(time.getTime());

    // Validity
    position.setValid(parser.group(index++).compareTo("A") == 0);

    // Latitude
    String hemisphere = parser.group(index++);
    Double latitude = Double.valueOf(parser.group(index++));
    latitude += Double.valueOf(parser.group(index++)) / 60;
    if (parser.group(index) != null) {
        hemisphere = parser.group(index);
    }
    index++;
    if (hemisphere.compareTo("S") == 0) {
        latitude = -latitude;
    }
    position.setLatitude(latitude);

    // Longitude
    hemisphere = parser.group(index++);
    Double longitude = Double.valueOf(parser.group(index++));
    longitude += Double.valueOf(parser.group(index++)) / 60;
    if (parser.group(index) != null) {
        hemisphere = parser.group(index);
    }
    index++;
    if (hemisphere != null && hemisphere.compareTo("W") == 0) {
        longitude = -longitude;
    }
    position.setLongitude(longitude);

    // Speed
    String speed = parser.group(index++);        
    if (speed != null) {
        position.setSpeed(Double.valueOf(speed));
    }

    // Course
    String course = parser.group(index++);
    if (course != null) {
        position.setCourse(Double.valueOf(course));
    }

    // Altitude
    String altitude = parser.group(index++);
    if (altitude != null) {
        position.setAltitude(Double.valueOf(altitude));
    }

    // Additional data
    // ACC
    extendedInfo.set("ACC", parser.group(index++));

    // Door
    extendedInfo.set("Door", parser.group(index++));

    //Fuel
    extendedInfo.set("Fuel", Double.valueOf(parser.group(index++)));

    // Extended info
    position.setExtendedInfo(extendedInfo.toString());

    return position;
}

}

extendedInfo.set("ACC", parser.group(index++));行 在Eclipse中产生错误,说无法解析extendedInfo。

0 个答案:

没有答案