Я продолжаю получать ошибку “Конструктор FogDevice(int, String, int, int, int, int, int) не определён”, даже после импорта необходимой библиотеки.

Вопрос или проблема

Это мой код на Java в iFogSim:

package org.fog.test.perfeval;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.LinkedList;
import java.util.List;

import org.cloudbus.cloudsim.Host;
import org.cloudbus.cloudsim.Log;
import org.cloudbus.cloudsim.Pe;
import org.cloudbus.cloudsim.Storage;
import org.cloudbus.cloudsim.core.CloudSim;
import org.cloudbus.cloudsim.power.PowerHost;
import org.cloudbus.cloudsim.provisioners.RamProvisionerSimple;
import org.cloudbus.cloudsim.sdn.overbooking.BwProvisionerOverbooking;
import org.cloudbus.cloudsim.sdn.overbooking.PeProvisionerOverbooking;
import org.fog.application.AppEdge;
import org.fog.application.AppLoop;
import org.fog.application.Application;
import org.fog.application.selectivity.FractionalSelectivity;
import org.fog.entities.Actuator;
import org.fog.entities.FogBroker;
import org.fog.entities.FogDevice;
import org.fog.entities.FogDeviceCharacteristics;
import org.fog.entities.Sensor;
import org.fog.entities.Tuple;
import org.fog.placement.Controller;
import org.fog.placement.ModuleMapping;
import org.fog.placement.ModulePlacementEdgewards;
import org.fog.placement.ModulePlacementMapping;
import org.fog.policy.AppModuleAllocationPolicy;
import org.fog.scheduler.StreamOperatorScheduler;
import org.fog.utils.FogLinearPowerModel;
import org.fog.utils.FogUtils;
import org.fog.utils.TimeKeeper;
import org.fog.utils.distribution.DeterministicDistribution;


public class dart {
    public static void main(String[] args) {
        // Инициализация CloudSim
        CloudSim.init(1, null, false);

        // Создание FogDevice для буйка DART
        FogDevice dartBuoy = createDartBuoy();

        // Симуляция чтения данных сенсоров
        simulateSensorReadings(dartBuoy);

        // Запуск симуляции
        CloudSim.startSimulation();
        CloudSim.stopSimulation();
    }

    private static FogDevice createDartBuoy() {
        // Параметры: id, name, mips, ram, bw, storage, upFogDeviceId
        int dartBuoyId = 1; // Уникальный ID для буйка DART
        String dartBuoyName = "DARTBuoy";
        int mips = 1000; // MIPS (миллион инструкций в секунду)
        int ram = 512; // Оперативная память в МБ
        int bw = 1000; // Пропускная способность в Мбит/с
        int storage = 10000; // Хранение в МБ
        int upFogDeviceId = -1; // -1 указывает на отсутствие родительского устройства

        // Создание устройства DART buoy
        FogDevice dartBuoy = new FogDevice(dartBuoyId, dartBuoyName, mips, ram, bw, storage, upFogDeviceId);
        return dartBuoy;
    }

    private static void simulateSensorReadings(FogDevice dartBuoy) {
        for (int i = 0; i < 10; i++) {
            double pressure = generateRandomPressure();
            double temperature = generateRandomTemperature();

            // Логирование данных
            System.out.println("Чтения сенсора от " + dartBuoy.getName() + ":");
            System.out.println("Давление: " + pressure + " hPa");
            System.out.println("Температура: " + temperature + " °C");
            System.out.println("-----------------------------");

            try {
                Thread.sleep(1000); // Симуляция задержки между чтениями
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    private static double generateRandomPressure() {
        // Генерация случайного давления от 1000 до 1100 hPa
        return 1000 + Math.random() * 100;
    }

    private static double generateRandomTemperature() {
        // Генерация случайной температуры от 0 до 30 °C
        return Math.random() * 30;
    }
}

При попытке создать компонент буйка DART (комментарий: // Создание устройства DART buoy) я продолжаю получать ошибку с сообщением “Конструктор FogDevice(int, String, int, int, int, int, int) не определен”, хотя библиотека, необходимая для конструктора, присутствует. Как это можно решить?

Я ожидаю вывод данных сенсора в следующем формате:

Чтения сенсора:
Давление: 1034.56 hPa
Температура: 22.45 °C

Чтения сенсора:
Давление: 1101.23 hPa
Температура: 18.76 °C

Ответ или решение

Ошибка "The constructor FogDevice(int, String, int, int, int, int, int) is undefined" возникает, когда вы пытаетесь создать объект класса FogDevice, но конструктор с указанной сигнатурой не существует в данной версии библиотеки. Давайте разберёмся, как это исправить.

1. Проверка документации и импорта

Прежде всего, убедитесь, что вы используете правильную версию библиотеки iFogSim. Возможно, в более новой версии API было изменено, добавлено или удалено количество параметров конструктора. Проверьте документацию, чтобы убедиться, что параметры конструктора соответствуют тому, что вы передаёте. Обратите внимание на следующее:

  • Убедитесь, что вы импортировали правильные классы.
  • Проверьте, были ли изменения в сигнатурах конструкторов FogDevice в обновлениях библиотеки.

2. Анализ параметров конструктора

Каждый конструктор FogDevice может принимать разные параметры. Например, если международные параметры конструктора в новой версии выглядят иным образом, вам нужно будет изменить ваш код в методе createDartBuoy(). Вот как выглядит типичная сигнатура конструктора FogDevice в более новых версиях:

FogDevice(int id, String name, FogDeviceCharacteristics characteristics, 
          List<Host> hosts, AppModuleAllocationPolicy appModuleAllocationPolicy);

Вместо передачи всех параметров в одном конструкторе, используйте объект FogDeviceCharacteristics и список Host, чтобы создать устройство.

3. Пример исправленного кода

Вот корректный способ создания объекта FogDevice с учетом новых параметров:

private static FogDevice createDartBuoy() {
    // Инициализируем характеристики устройства
    FogDeviceCharacteristics characteristics = new FogDeviceCharacteristics(
        "DARTBuoy", 
        1000, // MIPS
        512,  // RAM
        1000, // BW
        10000,// Storage
        "DC", // Положение
        new ArrayList<>()
    );

    // Создаем список хостов
    List<Host> hosts = new ArrayList<>();
    // Здесь можно добавить хосты, если они нужны

    // Создаем политику распределения модулей приложений
    AppModuleAllocationPolicy appModuleAllocationPolicy = new AppModuleAllocationPolicy(hosts);

    // Создаем FogDevice с использованием нового конструктора
    FogDevice dartBuoy = new FogDevice(dartBuoyId, dartBuoyName, 
        characteristics, hosts, appModuleAllocationPolicy);

    return dartBuoy;
}

4. Запуск приложения

После внесения вышеуказанных изменений ваш код, должен корректно создать объект FogDevice, и ошибка должна исчезнуть. Попробуйте запустить ваше приложение снова.

Ожидаемый вывод

После исправления, ваш код должен генерировать результаты, аналогичные приведённым ниже:

Sensor Readings from DARTBuoy:
Pressure: 1034.56 hPa
Temperature: 22.45 °C
-----------------------------
Sensor Readings from DARTBuoy:
Pressure: 1101.23 hPa
Temperature: 18.76 °C

Заключение

Следуя этим рекомендациям, вы сможете успешно устранить возникшую ошибку и корректно инициализировать устройства в вашем приложении. Убедитесь, что ваша среда разработки и библиотека обновлены для избежания подобных конфликтов в будущем.

Оцените материал
Добавить комментарий

Капча загружается...