2015-03-25 2 views
0

Я новый программист, и я хочу написать java-программу и использовать для нее библиотеку CityGML4j. Я видел несколько примеров программ citygml4j, но когда я запускаю их в NetBeans, я увидел внизу ошибки:ошибка из java lib "citygml4j"

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/xml/stream/writers/XMLWriter at org.citygml4j.builder.jaxb.xml.io.writer.JAXBOutputFactory.createCityGMLWriter(Unknown Source) at org.citygml4j.builder.jaxb.xml.io.writer.JAXBOutputFactory.createCityGMLWriter(Unknown Source) at buildingcreator.BuildingCreator.doMain(BuildingCreator.java:113) at buildingcreator.BuildingCreator.main(BuildingCreator.java:46) Caused by: java.lang.ClassNotFoundException: com.sun.xml.stream.writers.XMLWriter at java.net.URLClassLoader$1.run(URLClassLoader.java:372) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

программы Java:

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package buildingcreator; 

import java.io.File; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.List; 

import org.citygml4j.CityGMLContext; 
import org.citygml4j.builder.CityGMLBuilder; 
import org.citygml4j.factory.GMLGeometryFactory; 
import org.citygml4j.model.citygml.CityGMLClass; 
import org.citygml4j.model.citygml.building.AbstractBoundarySurface; 
import org.citygml4j.model.citygml.building.BoundarySurfaceProperty; 
import org.citygml4j.model.citygml.building.Building; 
import org.citygml4j.model.citygml.building.GroundSurface; 
import org.citygml4j.model.citygml.building.RoofSurface; 
import org.citygml4j.model.citygml.building.WallSurface; 
import org.citygml4j.model.citygml.core.CityModel; 
import org.citygml4j.model.citygml.core.CityObjectMember; 
import org.citygml4j.model.gml.geometry.aggregates.MultiSurface; 
import org.citygml4j.model.gml.geometry.aggregates.MultiSurfaceProperty; 
import org.citygml4j.model.gml.geometry.complexes.CompositeSurface; 
import org.citygml4j.model.gml.geometry.primitives.Polygon; 
import org.citygml4j.model.gml.geometry.primitives.Solid; 
import org.citygml4j.model.gml.geometry.primitives.SolidProperty; 
import org.citygml4j.model.gml.geometry.primitives.SurfaceProperty; 
import org.citygml4j.model.module.citygml.CityGMLVersion; 
import org.citygml4j.util.gmlid.DefaultGMLIdManager; 
import org.citygml4j.util.gmlid.GMLIdManager; 
import org.citygml4j.xml.io.CityGMLOutputFactory; 
import org.citygml4j.xml.io.writer.CityGMLWriter; 

/** 
* 
* @author Simin 
*/ 
public class BuildingCreator { 
    public static void main(String[] args) throws Exception { 
     new BuildingCreator().doMain(); 
    } 

    public void doMain() throws Exception { 
     SimpleDateFormat df = new SimpleDateFormat("[HH:mm:ss] "); 

     System.out.println(df.format(new Date()) + "setting up citygml4j context and JAXB builder"); 
     CityGMLContext ctx = new CityGMLContext(); 
     CityGMLBuilder builder = ctx.createCityGMLBuilder(); 

     System.out.println(df.format(new Date()) + "creating LOD2 building as citygml4j in-memory object tree"); 
     GMLGeometryFactory geom = new GMLGeometryFactory(); 

     GMLIdManager gmlIdManager = DefaultGMLIdManager.getInstance(); 

     Building building = new Building(); 

     Polygon ground = geom.createLinearPolygon(new double[] {0,0,0, 0,12,0, 6,12,0, 6,0,0, 0,0,0}, 3); 
     Polygon wall_1 = geom.createLinearPolygon(new double[] {6,0,0, 6,12,0, 6,12,6, 6,0,6, 6,0,0}, 3); 
     Polygon wall_2 = geom.createLinearPolygon(new double[] {0,0,0, 0,0,6, 0,12,6, 0,12,0, 0,0,0}, 3); 
     Polygon wall_3 = geom.createLinearPolygon(new double[] {0,0,0, 6,0,0, 6,0,6, 3,0,9, 0,0,6, 0,0,0}, 3); 
     Polygon wall_4 = geom.createLinearPolygon(new double[] {6,12,0, 0,12,0, 0,12,6, 3,12,9, 6,12,6, 6,12,0}, 3); 
     Polygon roof_1 = geom.createLinearPolygon(new double[] {6,0,6, 6,12,6, 3,12,9, 3,0,9, 6,0,6}, 3); 
     Polygon roof_2 = geom.createLinearPolygon(new double[] {0,0,6, 3,0,9, 3,12,9, 0,12,6, 0,0,6}, 3); 

     ground.setId(gmlIdManager.generateUUID()); 
     wall_1.setId(gmlIdManager.generateUUID()); 
     wall_2.setId(gmlIdManager.generateUUID()); 
     wall_3.setId(gmlIdManager.generateUUID()); 
     wall_4.setId(gmlIdManager.generateUUID()); 
     roof_1.setId(gmlIdManager.generateUUID()); 
     roof_2.setId(gmlIdManager.generateUUID()); 

     // lod2 solid 
     List<SurfaceProperty> surfaceMember = new ArrayList<SurfaceProperty>(); 
     surfaceMember.add(new SurfaceProperty('#' + ground.getId())); 
     surfaceMember.add(new SurfaceProperty('#' + wall_1.getId())); 
     surfaceMember.add(new SurfaceProperty('#' + wall_2.getId())); 
     surfaceMember.add(new SurfaceProperty('#' + wall_3.getId())); 
     surfaceMember.add(new SurfaceProperty('#' + wall_4.getId())); 
     surfaceMember.add(new SurfaceProperty('#' + roof_1.getId())); 
     surfaceMember.add(new SurfaceProperty('#' + roof_2.getId())); 

     CompositeSurface compositeSurface = new CompositeSurface(); 
     compositeSurface.setSurfaceMember(surfaceMember);  
     Solid solid = new Solid(); 
     solid.setExterior(new SurfaceProperty(compositeSurface)); 

     building.setLod2Solid(new SolidProperty(solid)); 

     // thematic boundary surfaces 
     List<BoundarySurfaceProperty> boundedBy = new ArrayList<BoundarySurfaceProperty>(); 
     boundedBy.add(createBoundarySurface(CityGMLClass.BUILDING_GROUND_SURFACE, ground)); 
     boundedBy.add(createBoundarySurface(CityGMLClass.BUILDING_WALL_SURFACE, wall_1)); 
     boundedBy.add(createBoundarySurface(CityGMLClass.BUILDING_WALL_SURFACE, wall_2)); 
     boundedBy.add(createBoundarySurface(CityGMLClass.BUILDING_WALL_SURFACE, wall_3)); 
     boundedBy.add(createBoundarySurface(CityGMLClass.BUILDING_WALL_SURFACE, wall_4)); 
     boundedBy.add(createBoundarySurface(CityGMLClass.BUILDING_ROOF_SURFACE, roof_1)); 
     boundedBy.add(createBoundarySurface(CityGMLClass.BUILDING_ROOF_SURFACE, roof_2));  
     building.setBoundedBySurface(boundedBy); 

     CityModel cityModel = new CityModel(); 
     cityModel.setBoundedBy(building.calcBoundedBy(false)); 
     cityModel.addCityObjectMember(new CityObjectMember(building)); 

     System.out.println(df.format(new Date()) + "writing citygml4j object tree"); 
     CityGMLOutputFactory out = builder.createCityGMLOutputFactory(CityGMLVersion.DEFAULT); 
      CityGMLWriter writer = out.createCityGMLWriter(new File("LOD2_Building_v200.gml")); 
     writer.setPrefixes(CityGMLVersion.DEFAULT); 
     writer.setSchemaLocations(CityGMLVersion.DEFAULT); 
     writer.setIndentString(" "); 
     writer.write(cityModel);  
       writer.close(); 

     System.out.println(df.format(new Date()) + "CityGML file LOD2_Building_v200.gml written"); 
     System.out.println(df.format(new Date()) + "sample citygml4j application successfully finished"); 
    } 

    private BoundarySurfaceProperty createBoundarySurface(CityGMLClass type, Polygon geometry) { 
     AbstractBoundarySurface boundarySurface = null; 

     switch (type) { 
     case BUILDING_WALL_SURFACE: 
      boundarySurface = new WallSurface(); 
      break; 
     case BUILDING_ROOF_SURFACE: 
      boundarySurface = new RoofSurface(); 
      break; 
     case BUILDING_GROUND_SURFACE: 
      boundarySurface = new GroundSurface(); 
      break; 
     default: 
      break; 
     } 

     if (boundarySurface != null) { 
      boundarySurface.setLod2MultiSurface(new MultiSurfaceProperty(new MultiSurface(geometry))); 
      return new BoundarySurfaceProperty(boundarySurface); 
     } 

     return null; 

     } 
} 
+0

У вас есть JAR установлен правильно? – AvetisG

+0

Я связал файл jar для проекта в свойствах проекта – user2169474

ответ

0

Также поместите все зависимые JARs на вашем пути к классам. Вы найдете эти JAR в lib вложенной папке дистрибутива citygml4j. Какую версию citygml4j вы используете? Кажется, вам не хватает sjsxp.jar на вашем пути к классам. Однако sjsxp.jar был заменен в последней версии 2.2 citygml4j.

citygml4j также доступен как артефакт Maven. Это значительно упрощает управление зависимостями.

<dependency> 
    <groupId>org.citygml4j</groupId> 
    <artifactId>citygml4j</artifactId> 
    <version>2.2</version> 
</dependency> 
Смежные вопросы