2013-02-12 7 views
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

Только примечания: это действительно плохая идея опубликовать чье-то имя и адрес электронной почты (особенно если это не ваше). – iamnotmaynard

+5

Исправьте иерархию папок, чтобы они соответствовали иерархии пасьянсов. Поместите классы unit-test в тестовый каталог, а не производственные классы, которые должны идти в основном. После этого, если вы все еще не можете запустить класс, вернитесь и сообщите нам, как вы пытаетесь его выполнить. –

ответ

0

Под папкой src вы должны иметь имя пакета, представленное в виде папок. В своем коде вы имеете: org.cloudbus.cloudsim.examples.auction как имя пакета, но не имеют ту же папку вы И, папка должна быть таким:

src/org/cloudbus/cloudsim/examples/auction/YourClass.java 
+1

Благодарим вас за помощь, я выяснил решение, просто создав новый проект, в котором есть пакеты в папке src. Но я думаю, есть еще один более простой, который заключается в создании проекта через файл pom.xml с помощью инструмента Maven. – user2065042

Смежные вопросы