0

当我尝试执行下面的 java 类(AuctionExample1.java)时,出现以下错误:“选择不包含主要类型”

这是java类:

package org.cloudbus.cloudsim.examples.auction;

/**
* A simple example showing how to create a bidder datacenter and a bidder broker 
* and start the auction.
* No VM is specified at all because no one wins he auction.
* 
* Created on 2011/9/9
*/
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.LinkedList;
import java.util.List;

import org.cloudbus.cloudsim.Cloudlet;
import org.cloudbus.cloudsim.CloudletSchedulerTimeShared;
import org.cloudbus.cloudsim.DatacenterCharacteristics;
import org.cloudbus.cloudsim.Host;
import org.cloudbus.cloudsim.Log;
import org.cloudbus.cloudsim.Pe;
import org.cloudbus.cloudsim.Storage;
import org.cloudbus.cloudsim.UtilizationModel;
import org.cloudbus.cloudsim.UtilizationModelFull;
import org.cloudbus.cloudsim.Vm;
import org.cloudbus.cloudsim.VmAllocationPolicySimple;
import org.cloudbus.cloudsim.VmSchedulerTimeShared;
import org.cloudbus.cloudsim.auction.auctioneer.Auctioneer;
import org.cloudbus.cloudsim.auction.bid.DatacenterBid;
import org.cloudbus.cloudsim.auction.bid.DatacenterBrokerBid;
import org.cloudbus.cloudsim.auction.bidder.BidderDatacenter;
import org.cloudbus.cloudsim.auction.bidder.BidderDatacenterBroker;
import org.cloudbus.cloudsim.auction.vm.DatacenterAbstractVm;
import org.cloudbus.cloudsim.auction.vm.VmCharacteristics;
import org.cloudbus.cloudsim.core.CloudSim;
import org.cloudbus.cloudsim.provisioners.BwProvisionerSimple;
import org.cloudbus.cloudsim.provisioners.PeProvisionerSimple;
import org.cloudbus.cloudsim.provisioners.RamProvisionerSimple;

public class AuctionExample1 {

/** The cloudlet list. */
private static List<Cloudlet> cloudletList;

/** The vmlist. */
private static List<Vm> vmlist;

/**
 * Creates main() to run this example.
 *
 * @param args the args
 */
public static void main(String[] args) {
    Log.printLine("Starting AuctionExample1...");

    try {
        // First step: Initialize the CloudSim package. It should be called
        // before creating any entities.
        int num_user = 1; // number of cloud users
        Calendar calendar = Calendar.getInstance();
        boolean trace_flag = false; // mean trace events

        // Initialize the CloudSim library
        CloudSim.init(num_user, calendar, trace_flag);
        Auctioneer.initAuctioneer();

        // Second step: Create Datacenters
        // Datacenters are the resource providers in CloudSim. We need at
        // list one of them to run a CloudSim simulation
        BidderDatacenter datacenter0 = createDatacenter("Datacenter_0");

        // Third step: Create Broker
        BidderDatacenterBroker broker = createBroker();
        int brokerId = broker.getId();

        // Fourth step: Create one virtual machine
        vmlist = new ArrayList<Vm>();

        // VM description
        int vmid = 0;
        int mips = 1000;  /*Youness: VM need  to  be  allocated  a  share  of  
        processing  power  on   Datacenter's  hosts.*/

        long size = 10000; // image size (MB) (Youness: virtual machine's image size)
        int ram = 512; // vm memory (MB)
        long bw = 1000;
        int pesNumber = 1; // number of cpus
        String vmm = "Xen"; // VMM name

        // create VM
        Vm vm = new Vm(vmid, brokerId, mips, pesNumber, ram, bw, size, vmm, new                 CloudletSchedulerTimeShared());

        // add the VM to the vmList
        vmlist.add(vm);

        // Fifth step: Create one Cloudlet
        cloudletList = new ArrayList<Cloudlet>();

        // Cloudlet properties
        int id = 0;
        long length = 400000; //MI       cloudletLength
        long fileSize = 300;   //cloudletFileSize
        long outputSize = 300;  //cloudletOutputSize
        UtilizationModel utilizationModel = new UtilizationModelFull();

        Cloudlet cloudlet = new Cloudlet(id, length, pesNumber, fileSize, outputSize, utilizationModel, utilizationModel, utilizationModel);
        cloudlet.setUserId(brokerId);
        cloudlet.setVmId(vmid);//Youness: Bind cloudLet to a VM. If you do not do this, application assigns the first created VM for this cloudlet

        // add the cloudlet to the list
        cloudletList.add(cloudlet);

        // submit cloudlet list to the broker
        broker.submitCloudletList(cloudletList);


        DatacenterBrokerBid brokerBid = new DatacenterBrokerBid(broker.getId(), 0.0035);
        brokerBid.addVM(vm, 1);
        broker.submitBid(brokerBid);

        // Sixth step: Starts the simulation
        CloudSim.startSimulation();         

        CloudSim.stopSimulation();

        //Final step: Print results when simulation is over
        List<Cloudlet> newList = broker.getCloudletReceivedList();
        printCloudletList(newList);

        // Print the debt of each user to each datacenter
        datacenter0.printDebts();

        Log.printLine("AuctionExample1 finished!");
    } catch (Exception e) {
        e.printStackTrace();
        Log.printLine("Unwanted errors happen");
    }
}

/**
 * Creates the datacenter.
 *
 * @param name the name
 *
 * @return the datacenter
 */
private static BidderDatacenter createDatacenter(String name) {

    // Here are the steps needed to create a PowerDatacenter:
    // 1. We need to create a list to store
    // our machine
    List<Host> hostList = new ArrayList<Host>();

    // 2. A Machine contains one or more PEs or CPUs/Cores.
    // In this example, it will have only one core.
    List<Pe> peList = new ArrayList<Pe>();

    int mips = 1000;

    // 3. Create PEs and add these into a list.
    peList.add(new Pe(0, new PeProvisionerSimple(mips))); // need to store Pe id and MIPS Rating

    // 4. Create Host with its id and list of PEs and add them to the list
    // of machines
    int hostId = 0;
    int ram = 2048; // host memory (MB)
    long storage = 1000000; // host storage
    int bw = 10000;

    Host host = new Host(
            hostId,
            new RamProvisionerSimple(ram),
            new BwProvisionerSimple(bw),
            storage,
            peList,
            new VmSchedulerTimeShared(peList)
        );
    hostList.add(host); // This is our machine

    // 5. Create a DatacenterCharacteristics object that stores the
    // properties of a data center: architecture, OS, list of
    // Machines, allocation policy: time- or space-shared, time zone
    // and its price (G$/Pe time unit).
    String arch = "x86"; // system architecture
    String os = "Linux"; // operating system
    String vmm = "Xen";
    double time_zone = 10.0; // time zone this resource located
    double cost = 3.0; // the cost of using processing in this resource
    double costPerMem = 0.05; // the cost of using memory in this resource
    double costPerStorage = 0.001; // the cost of using storage in this
                                    // resource
    double costPerBw = 0.0; // the cost of using bw in this resource
    LinkedList<Storage> storageList = new LinkedList<Storage>(); // we are not adding SAN
                                                // devices by now

    DatacenterCharacteristics characteristics = new DatacenterCharacteristics(
            arch, os, vmm, hostList, time_zone, cost, costPerMem,
            costPerStorage, costPerBw);

    // 6. Finally, we need to create a PowerDatacenter object.
    BidderDatacenter datacenter = null;
    try {
        datacenter = new BidderDatacenter(name, characteristics, new VmAllocationPolicySimple(hostList), storageList, 0);
    } catch (Exception e) {
        e.printStackTrace();
    }

    //TODO check if VM fits the host
    VmCharacteristics vmCharacteristics = new VmCharacteristics(
            arch, os, vmm, time_zone, cost, costPerMem,
            costPerStorage, costPerBw);
    DatacenterAbstractVm vm = new DatacenterAbstractVm(1000, 1, 512, 1000, 1000, vmCharacteristics);
    DatacenterBid bid = new DatacenterBid(datacenter.getId());
    bid.addVM(vm, 1);
    datacenter.submitBid(bid);

    return datacenter;
}

// We strongly encourage users to develop their own broker policies, to
// submit vms and cloudlets according
// to the specific rules of the simulated scenario
/**
 * Creates the broker.
 *
 * @return the datacenter broker
 */
private static BidderDatacenterBroker createBroker() {
    BidderDatacenterBroker broker = null;
    try {
        broker = new BidderDatacenterBroker("Broker");
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
    return broker;
}

/**
 * Prints the Cloudlet objects.
 *
 * @param list list of Cloudlets
 */
private static void printCloudletList(List<Cloudlet> list) {
    int size = list.size();
    Cloudlet cloudlet;

    String indent = "    ";
    Log.printLine();
    Log.printLine("========== OUTPUT ==========");
    Log.printLine("Cloudlet ID" + indent + "STATUS" + indent
            + "Data center ID" + indent + "VM ID" + indent + "Time" + indent
            + "Start Time" + indent + "Finish Time");

    DecimalFormat dft = new DecimalFormat("###.##");
    for (int i = 0; i < size; i++) {
        cloudlet = list.get(i);
        Log.print(indent + cloudlet.getCloudletId() + indent + indent);

        if (cloudlet.getCloudletStatus() == Cloudlet.SUCCESS) {
            Log.print("SUCCESS");

            Log.printLine(indent + indent + cloudlet.getResourceId()
                    + indent + indent + indent + cloudlet.getVmId()
                    + indent + indent
                    + dft.format(cloudlet.getActualCPUTime()) + indent
                    + indent + dft.format(cloudlet.getExecStartTime())
                    + indent + indent
                    + dft.format(cloudlet.getFinishTime()));
        }
    }
}

}

我想补充一点,这个项目的结构不构成包。以下是项目层次结构的概要描述:

/CloudAuction
/CloudAuction/src
/CloudAuction/src/main
/CloudAuction/src/test
/CloudAuction/src/test/java
/CloudAuction/src/test/java/org.cloudbus.cloudsim.examples.auction
/CloudAuction/src/test/java/org.cloudbus.cloudsim.examples.auction/AuctionExample1.java
/CloudAuction/src/test/java/org.cloudbus.cloudsim.examples.auction/AuctionExample2.java
/CloudAuction/src/test/java/org.cloudbus.cloudsim.examples.auction/AuctionExample3.java
/CloudAuction/src/test/java/org.cloudbus.cloudsim.examples.auction/AuctionExample4.java
/CloudAuction/src/test/java/org.cloudbus.cloudsim.examples.auction/BidderBrokerFactory.java
/CloudAuction/src/test/java/org.cloudbus.cloudsim.examples.auction/BidderDatacenterFactory.java
/CloudAuction/target
/CloudAuction/pom.xml

任何人都可以帮我找到解决这个问题的方法吗?

4

1 回答 1

0

在 src 文件夹下,您必须将包名称表示为文件夹。在您的代码中,您有: org.cloudbus.cloudsim.examples.auction 作为包名称,但您的 src 中没有相同的文件夹,该文件夹需要是这样的:

src/org/cloudbus/cloudsim/examples/auction/YourClass.java 
于 2013-02-12T15:57:52.243 回答