Hi, i am making a texuture previewer and converter,now i am testing how to load textures from files selected by the user by a JfileChooser. As it is necessary tu have the resoruces into asset folder when i try to load a texture with the next code the texture result is a null reference. So i need that assetmanager can accept loadtextures from the selectedfiles of the jfilechooser
[java]myFrame=new JFrame();
if(myFileChooser.showOpenDialog(myFrame)==JFileChooser.APPROVE_OPTION){
AssetManager assetManager= new AssetManager() {
@Override
public void unregisterLocator(String arg0,
Class<? extends AssetLocator> arg1) {
// TODO Auto-generated method stub
}
@Override
public void unregisterLoader(Class<? extends AssetLoader> arg0) {
// TODO Auto-generated method stub
}
@Override
public void setShaderGenerator(ShaderGenerator arg0) {
// TODO Auto-generated method stub
}
@Override
@Deprecated
public void setAssetEventListener(AssetEventListener arg0) {
// TODO Auto-generated method stub
}
@Override
public void removeClassLoader(ClassLoader arg0) {
// TODO Auto-generated method stub
}
@Override
public void removeAssetEventListener(AssetEventListener arg0) {
// TODO Auto-generated method stub
}
@Override
public void registerLocator(String arg0, Class<? extends AssetLocator> arg1) {
// TODO Auto-generated method stub
}
@Override
@Deprecated
public void registerLocator(String arg0, String arg1) {
// TODO Auto-generated method stub
}
@Override
public void registerLoader(Class<? extends AssetLoader> arg0,
String... arg1) {
// TODO Auto-generated method stub
}
@Override
@Deprecated
public void registerLoader(String arg0, String... arg1) {
// TODO Auto-generated method stub
}
@Override
public AssetInfo locateAsset(AssetKey<?> arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public Texture loadTexture(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public Texture loadTexture(TextureKey arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public Shader loadShader(ShaderKey arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public Spatial loadModel(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public Spatial loadModel(ModelKey arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public Material loadMaterial(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public BitmapFont loadFont(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public FilterPostProcessor loadFilter(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public FilterPostProcessor loadFilter(FilterKey arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public AudioData loadAudio(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public AudioData loadAudio(AudioKey arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public Object loadAsset(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public <T> T loadAsset(AssetKey<T> arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public ShaderGenerator getShaderGenerator(EnumSet<Caps> arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<ClassLoader> getClassLoaders() {
// TODO Auto-generated method stub
return null;
}
@Override
public void clearAssetEventListeners() {
// TODO Auto-generated method stub
}
@Override
public void addClassLoader(ClassLoader arg0) {
// TODO Auto-generated method stub
}
@Override
public void addAssetEventListener(AssetEventListener arg0) {
// TODO Auto-generated method stub
}
};
Texture inputTexture=assetManager.loadTexture(myFileChooser.getSelectedFile().getAbsolutePath());
Image inputImage= inputTexture.getImage();
Image outputImage= new Image();
outputImage.setHeight(inputImage.getHeight());
outputImage.setWidth(inputImage.getWidth());
outputImage.setFormat(Image.Format.DXT1);
ImageToAwt.convert(inputImage, outputImage);
JmeExporter exporter= new JmeExporter() {
@Override
public boolean save(Savable arg0, File arg1) throws IOException {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean save(Savable arg0, OutputStream arg1) throws IOException {
// TODO Auto-generated method stub
return false;
}
@Override
public OutputCapsule getCapsule(Savable arg0) {
// TODO Auto-generated method stub
return null;
}
};
File outputFile= new File(myFileChooser.getSelectedFile().getAbsoluteFile() +"new.dds");
exporter.save(outputImage,outputFile);
}[/java]
I created an empty assetmanager because it was the only way i saw to load a texture from a file, as my intention is to create a tool to preview textures from files selected by the user i need a way to load textures from any path in the pc.but i don´t know if there is any other way
I have followed the java doc and now my code is the next, but as i am not using an entire jmonkeyapp i must did something wrong because i can´t load the files, here is the new code:
[java]public class Main {
static JFrame myFrame;
static JFileChooser myFileChooser= new JFileChooser();
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
myFrame=new JFrame();
if(myFileChooser.showOpenDialog(myFrame)==JFileChooser.APPROVE_OPTION){
AssetManager assetManager= new AssetManager() {
@Override
public void unregisterLocator(String arg0,
Class<? extends AssetLocator> arg1) {
// TODO Auto-generated method stub
}
@Override
public void unregisterLoader(Class<? extends AssetLoader> arg0) {
// TODO Auto-generated method stub
}
@Override
public void setShaderGenerator(ShaderGenerator arg0) {
// TODO Auto-generated method stub
}
@Override
@Deprecated
public void setAssetEventListener(AssetEventListener arg0) {
// TODO Auto-generated method stub
}
@Override
public void removeClassLoader(ClassLoader arg0) {
// TODO Auto-generated method stub
}
@Override
public void removeAssetEventListener(AssetEventListener arg0) {
// TODO Auto-generated method stub
}
@Override
public void registerLocator(String arg0, Class<? extends AssetLocator> arg1) {
// TODO Auto-generated method stub
}
@Override
@Deprecated
public void registerLocator(String arg0, String arg1) {
// TODO Auto-generated method stub
}
@Override
public void registerLoader(Class<? extends AssetLoader> arg0,
String... arg1) {
// TODO Auto-generated method stub
}
@Override
@Deprecated
public void registerLoader(String arg0, String... arg1) {
// TODO Auto-generated method stub
}
@Override
public AssetInfo locateAsset(AssetKey<?> arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public Texture loadTexture(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public Texture loadTexture(TextureKey arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public Shader loadShader(ShaderKey arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public Spatial loadModel(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public Spatial loadModel(ModelKey arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public Material loadMaterial(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public BitmapFont loadFont(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public FilterPostProcessor loadFilter(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public FilterPostProcessor loadFilter(FilterKey arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public AudioData loadAudio(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public AudioData loadAudio(AudioKey arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public Object loadAsset(String arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public <T> T loadAsset(AssetKey<T> arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public ShaderGenerator getShaderGenerator(EnumSet<Caps> arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<ClassLoader> getClassLoaders() {
// TODO Auto-generated method stub
return null;
}
@Override
public void clearAssetEventListeners() {
// TODO Auto-generated method stub
}
@Override
public void addClassLoader(ClassLoader arg0) {
// TODO Auto-generated method stub
}
@Override
public void addAssetEventListener(AssetEventListener arg0) {
// TODO Auto-generated method stub
}
};
String path=myFileChooser.getSelectedFile().getAbsolutePath();
Texture inputTexture=loadTextureFromFilePath(assetManager,myFileChooser.getSelectedFile().toPath());
Image inputImage= inputTexture.getImage();
Image outputImage= new Image();
outputImage.setHeight(inputImage.getHeight());
outputImage.setWidth(inputImage.getWidth());
outputImage.setFormat(Image.Format.DXT1);
ImageToAwt.convert(inputImage, outputImage);
JmeExporter exporter= new JmeExporter() {
@Override
public boolean save(Savable arg0, File arg1) throws IOException {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean save(Savable arg0, OutputStream arg1) throws IOException {
// TODO Auto-generated method stub
return false;
}
@Override
public OutputCapsule getCapsule(Savable arg0) {
// TODO Auto-generated method stub
return null;
}
};
File outputFile= new File(myFileChooser.getSelectedFile().getAbsoluteFile() +"new.dds");
exporter.save(outputImage,outputFile);
}
}
private static Texture loadTextureFromFilePath(AssetManager assetManager,Path filePath){
String fileName=filePath.getFileName().toString();
String fileDirectory=filePath.getParent().toString();
assetManager.registerLocator(fileDirectory, FileLocator.class);
return assetManager.loadTexture(fileName);
}
If you instantiate your own AssetManager, you have to implement the methods which you’re going to use. Leaving them as auto-generated stubs is unlikely to do what you want. For instance, a loadTexture() method which returns null means you will never get a Texture instance out of it. You will always get null, which tends to result in a NullPointerException.
I have a suggestion. Instead of trying to create your own AssetManager (which is difficult), how about using the one provided by SimpleApplication and then point your the JFileChooser to the appropriate directory, which is probably at System.getProperty(“user.dir”)+"/assets" ?
You can also just instantiate your own DesktopAssetManager… which is what SimpleApplication is using.
…but again I kind of question the need. If you are going to try displaying these textures in Swing without JME then you will end up converting JME Images back to AWT Images… when they started as AWT images in the first place loaded from ImageIO. http://docs.oracle.com/javase/6/docs/api/javax/imageio/ImageIO.html
No, sorry : learn java, you have obviously a lack here (you extends something that is not meant to be extended and you override eveyr method with an empty body etc.)
I am learning java, i am preparing SCJP exam, the reason of all that overrides is that were autogenerated and as i didn´t know how assetmanager works i didn´t do something. I wanted to use assetManager to have the possibility of preview dds files, but as you tell me i think the easiest way is going to be read dds files as binary to create an image and then convert it to a swing compatible format.
@jor1980 said:
I am learning java, i am preparing SCJP exam, the reason of all that overrides is that were autogenerated and as i didn´t know how assetmanager works i didn´t do something. I wanted to use assetManager to have the possibility of preview dds files, but as you tell me i think the easiest way is going to be read dds files as binary to create an image and then convert it to a swing compatible format.
You really won’t be able to preview dds files anyway… you would require OpenGL for that. (I mean not with the standard AssetManager… dds is often in device-specific format that is sent straight to the GPU)
Finally i found a very easy way to preview dds textures in Swing, using DDSUtil to obtain a BufferedImage, and for non dds files using ImageIO:
[java]BufferedImage imageToDraw;
if(myFileChooser.getSelectedFile().getName().endsWith(".dds")){
imageToDraw= DDSUtil.read(myFileChooser.getSelectedFile());
}
else
{
imageToDraw=ImageIO.read(myFileChooser.getSelectedFile());
}[/java]