Note that there are some explanatory texts on larger screens.

plurals
  1. POImage only dispay in one instance of Vaadin
    primarykey
    data
    text
    <p>Im new to java and Vaadin. I`ve made a simple project with maven. Its working, but some behaviours are not like it ment to be. Mostly important png image shows only in one window. App is suppose to show images in many windows instead. </p> <p>There is an Admin class that contains next and previous button, these are working but after opening up client window png from admin window dissapears. </p> <p>Is this a common issue? Do I have to spec somehow that Image object can be used multiple times? </p> <p>ClientWindow.class</p> <p>AdminWindow.class - singleton, contains list of client Windows reminds them of current image change</p> <p>Displayer.class - singleton, </p> <p>Ive tried even copying Image before replacing in layout. Do anyone have idea whats going on? </p> <p>This is displayer class:</p> <blockquote> <p>package multiUser;</p> </blockquote> <pre><code>//import java.io.File; import java.io.File; import java.util.ArrayList; import java.util.List; import com.vaadin.server.FileResource; import com.vaadin.server.ThemeResource; import com.vaadin.server.VaadinService; import com.vaadin.ui.Image; public class Displayer { //deklaracja singletonu private final static Displayer instance = new Displayer(); public static Displayer getInstance() { return instance; } private List&lt;Image&gt; images = new ArrayList(); String basepath = VaadinService.getCurrent() .getBaseDirectory().getAbsolutePath(); Image currentImage; int currentImageIndex=0; private Displayer() { fillListImages(); setFirstImageAsCurrent(); } private void setFirstImageAsCurrent() { currentImage = images.get(currentImageIndex); } private void fillListImages() { for (int i = 1 ; i&lt;4 ; i++){ FileResource resource = new FileResource(new File(basepath + "/WEB-INF/images/" + i +".png")); images.add(new Image("",resource)); } } public void nextImage() { if(currentImageIsLast()) { currentImage = images.get(0); } else{ currentImageIndex = images.indexOf(currentImage); currentImageIndex = currentImageIndex + 1; currentImage = images.get(currentImageIndex); } } public void previousImage() { if(currentImageIsFirst()) { currentImage = images.get(images.size() - 1); } else{ currentImageIndex = images.indexOf(currentImage); currentImageIndex = currentImageIndex - 1; currentImage = images.get(currentImageIndex); } } private boolean currentImageIsFirst() { return currentImage == images.get(0); } private boolean currentImageIsLast() { return currentImage == images.get(images.size()-1); } public Image getCurrentImage() { return currentImage; } </code></pre> <p>}</p> <p>Ok, I solved this issue. i deleted imges list and make geyCurrentImage() method to resolve resource for image every time its called : </p> <p>Working code: </p> <p>* package multiUser;</p> <pre><code>//import java.io.File; import java.io.File; import java.util.ArrayList; import java.util.List; import com.vaadin.server.FileResource; import com.vaadin.server.ThemeResource; import com.vaadin.server.VaadinService; import com.vaadin.ui.Image; public class Displayer { //deklaracja singletonu private final static Displayer instance = new Displayer(); public static Displayer getInstance() { return instance; } String basepath = VaadinService.getCurrent() .getBaseDirectory().getAbsolutePath(); int currentImageIndex=1; int imagesAmount= 3; private Displayer() { } private Image getImageResource(int index) { FileResource resource = new FileResource(new File(basepath + "/WEB-INF/images/" + index +".png")); Image image = new Image("",resource); return image; } public void nextImage() { if(currentImageIndex==imagesAmount) { currentImageIndex=1 ; } else{ currentImageIndex = currentImageIndex + 1; } } public void previousImage() { if(currentImageIndex==1) { currentImageIndex = imagesAmount; } else{ currentImageIndex = currentImageIndex - 1; } } public Image getCurrentImage() { Image currentImage = getImageResource(currentImageIndex); return currentImage; } </code></pre> <p>} *</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload