2011-10-20 4 views
6

? Estoy tratando de cargar las imágenes de mi carpeta de computadora en una pared de thumnails. Leí del anterior thread de otro foro que la instancia "url" de ImageView aplicable no es compatible con las rutas del sistema. Intenté con la solución allí, pero causará java.lang.OutOfMemoryError: espacio de pila Java mientras sigue leyendo el archivo.¿Cómo puedo cargar las imágenes del directorio de computadora en JAVAFX

otro problema es que me sigue advirtiendo de usar el paquete javafx.ext ---> SwingUtils.toFXImage método.

También he tratado de introducir la URL de ser lo más abajo url: "file: //localhost//Users/user/Pictures/Camera/test/1.JPG" he intentado pantalla 20 veces de la imagen , solo muestra una imagen aleatoria de 3 o 4 solo cuando ejecuto mi aplicación. Las imágenes se mostrarán como cuadros vacíos que crean para almacenarlas

comprobé con la función de error proporcionada por ImageView, no indica que ninguna de mis imágenes haya encontrado un error.

¿Hay alguna otra alternativa?

realmente necesitamos ayuda en esto. han estado intentando durante días.

Códigos

function load() { 
println("RUNTIME {Runtime.getRuntime().maxMemory()}"); 
System.gc(); 
Runtime.getRuntime().freeMemory(); 

//MAC Folder PATH 
var path: String = "/Users/username/Pictures/camera/test/1.JPG";; 
var file: File = new File(path); 
//http://download.oracle.com/docs/cd/E17802_01/javafx/javafx/1.3/docs/api/javafx.ext.swing/javafx.ext.swing.SwingUtils.html 
//public toFXImage(image: java.awt.image.BufferedImage) : Image 
//Creates a JavaFX Image from a BufferedImage. 
img = SwingUtils.toFXImage(ImageIO.read(file)); 
} 

Respuesta

19

No está claro exactamente lo que está tratando de hacer. Si está hablando de JavaFX 2.0, el siguiente código funciona. Si está cargando muchas imágenes y necesita conservar memoria, solo tiene que crear suficientes ImageView para el número que desea mostrar a la vez. Luego, al pasar página por las imágenes, puede cambiar el objeto Image contenido en ImageView.

public void start(Stage primaryStage) { 
    primaryStage.setTitle("Hello World"); 
    StackPane root = new StackPane(); 
    Scene scene = new Scene(root, 300, 250); 

    File file = new File("/System/Library/CoreServices/loginwindow.app/Contents/Resources/LogOut.png"); 
    Image image = new Image(file.toURI().toString()); 
    ImageView iv = new ImageView(image); 

    root.getChildren().add(iv); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 
+0

Si tuviera que usar una imagen en una carpeta en el mismo 'dr', ¿podría pasar'./Imags/img.png' como valor al nuevo 'Archivo'? –

1

Otra solución es pasar el InputStream al constructor de la clase de imagen; y está trabajando ...

public void start(Stage primaryStage) { 
    primaryStage.setTitle("Hello World"); 
    StackPane root = new StackPane(); 
    Scene scene = new Scene(root, 300, 250); 

    java.io.FileInputStream fis = new FileInputStream("/System/Library/CoreServices/loginwindow.app/Contents/Resources/LogOut.png"); 
    ImageView iv = new ImageView(new Image(fis)); 

    root.getChildren().add(iv); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 
4

su simple: abrir una imagen con un navegador y copie toda la URL de la foto y pegarlo como un parámetro del objeto de imagen. NO QUITE el "archivo ///:" porque esto hace que la imagen sea cargable. obtendrás tu otra lógica desde allí. feliz por ejemplo, la codificación

Image image = new Image("file:///C:/Users/Nigel/Desktop/my_image.png"); 
ImageView imgview = new ImageView(image); 
1

lo siento si mi respuesta llegó un poco tarde, pero que era mi enfoque y funciona al 100% siempre que usted está poniendo su archivo 1.marcar su imagen en archivo 2.parse el archivo de URI 3.assign la uri.toString() a la imagen

código ex:

File imageFile = new File("path/to/image/outside/your/jar/awesomeless.jpg"); 
String fileLocation = imageFile.toURI().toString(); 
Image fxImage = new Image(fileLocation);  

o simplemente puede poner todo junto como esto:

Image fxImage = new Image(new File("path/.../awesomemore.jpg").toURI().toString()); 

y por favor, si alguien conoce un enfoque mejor háganoslo saber!

1

Ninguna de las respuestas anteriores funcionó para mí. Sin embargo, este, que vi hace un tiempo pero no puedo encontrar un enlace original, funciona sin problemas.

@Override 
public void start(Stage primaryStage) throws Exception { 
    //create a pane to hold the image views 
    Pane pane = new HBox(10); 
    pane.setPadding(new Insets(5,5,5,5)); 

    //create the image to be used! 
    Image image = new Image("/Content/vortex.jpg"); 

    //set some custom properties and add an image 
    ImageView imageView = new ImageView(image); 
    imageView.setFitHeight(100); 
    imageView.setFitWidth(100); 
    pane.getChildren().add(imageView); 

    //add the second image view with this image and no custom properties 
    pane.getChildren().add(new ImageView(image)); 

    ImageView imageView2 = new ImageView(image); 
    imageView2.setRotate(45); 
    pane.getChildren().add(imageView2); 

    Scene scene = new Scene(pane, 200, 200); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

public static void main(String[] args) { 
    Application.launch(args); 
} 

La clave es que cuando se crea la imagen, iniciar el camino con un '/' (es decir: "/Content/vortex.jpg"). Tenga en cuenta que en esta configuración, la carpeta raíz es la carpeta src en la mayoría de los IDEs.

Cuestiones relacionadas