Forum » Programiranje » grafika problem [JAVA]
grafika problem [JAVA]
Bojevnik ::
Pri naslednjem programu mi vrne NullPointerException v vrstici označeni z ***. Mislim da pa probleme dela zgornja vrstica(**), ker ne naredi slike oz po njenem klici je memImage še vedno null.
Kaj je sploh narobe in kako lahko popravim?
Kaj je sploh narobe in kako lahko popravim?
import java.awt.*; import javax.swing.*; public class Panela extends JPanel implements Runnable{ int korak=0; int zakasnitev=50; boolean running=false; Image memImage; Graphics memGraphics; Thread nit; Panela(){ **memImage= createImage(500,500); ***memGraphics = memImage.getGraphics(); setVisible(true); start(); } public void run(){ while(running){ long cas=System.currentTimeMillis(); korak++; repaint(); cas=System.currentTimeMillis(); try{ if(cas<zakasnitev) Thread.sleep(zakasnitev-(int) cas); } catch(InterruptedException e){e.printStackTrace(); System.exit(-1);} } } public void start(){ if(!running) { nit= new Thread(this); nit.start(); running=true; } } public void paint(Graphics g){ update(g); } public void update(Graphics g){ memGraphics.setColor(getBackground()); memGraphics.fillRect(0, 0, getWidth(), getHeight()); memGraphics.setColor(Color.black); int odmik= korak % 20; for(int x=0; x<getWidth()+getHeight(); x+=20){ memGraphics.drawLine(x, 0, 0, x); }//for g.drawImage(memImage, 0, 0, this); } }
- spremenilo: Bojevnik ()
morbo ::
Component.createImage()
Probaj klicat potem ko je panel zrealiziran
Returns:
an off-screen drawable image, which can be used for double buffering. The return value may be null if the component is not displayable. This will always happen if GraphicsEnvironment.isHeadless() returns true.
Probaj klicat potem ko je panel zrealiziran
Bojevnik ::
Hmm tiste dve vrstici sem dal v run metodo pa ni delalo.
Tega dela grafike nisem nikoli preveč razumel.
Ker celoten program je narejen tako da imam funkcijo main ki ustvari JFrame, potem pa v JFrame dodam ta JPanel( Če je kakšen boljši način naj me kdo popravi.).
Se pravi naj v JFrame kličem
Tega dela grafike nisem nikoli preveč razumel.
Ker celoten program je narejen tako da imam funkcijo main ki ustvari JFrame, potem pa v JFrame dodam ta JPanel( Če je kakšen boljši način naj me kdo popravi.).
Se pravi naj v JFrame kličem
JPanel pan= new Panela(); pa.setBound(0,0,500,500); add(pan); memImage= createImage(500,500); memGraphics = memImage.getGraphics(); pan.start();
morbo ::
Probaj to zaporedje:
- ustvari Frame
- ustvari Panel in ga prilepi
- prikaži Frame (pack() setVisibe())
- ustvari sliko
- poženi nit
(btw; ne ustvarjat nove niti iz konstruktorja panel-a. start() kliči takrat ko je panel že ustvarjen)
- ustvari Frame
- ustvari Panel in ga prilepi
- prikaži Frame (pack() setVisibe())
- ustvari sliko
- poženi nit
(btw; ne ustvarjat nove niti iz konstruktorja panel-a. start() kliči takrat ko je panel že ustvarjen)
Zgodovina sprememb…
- spremenil: morbo ()
Bojevnik ::
Hvala dela.
Pa če slučajno koga zanima tukaj je delujoča koda.
Pa če slučajno koga zanima tukaj je delujoča koda.
import java.awt.*; import javax.swing.*; public class Panela extends JPanel implements Runnable{ int korak=0; int zakasnitev=500; boolean running=false; Image memImage; Graphics memGraphics; Thread nit; Panela(){ } public void run(){ while(running){ long cas=System.currentTimeMillis(); korak++; repaint(); cas=System.currentTimeMillis(); try{ if(cas<zakasnitev) Thread.sleep(zakasnitev-(int) cas); } catch(InterruptedException e){e.printStackTrace(); System.exit(-1);} } } public void start(){ if(!running) { nit= new Thread(this); nit.start(); running=true; } } public void paintComponent(Graphics g){ memImage= createImage(500,500); memGraphics = memImage.getGraphics(); if(!running) start(); update(g); } public void update(Graphics g){ memGraphics.setColor(getBackground()); memGraphics.fillRect(0, 0, getWidth(), getHeight()); memGraphics.setColor(Color.black); int odmik= korak % 20; for(int x=0; x<getWidth()+getHeight(); x+=20){ memGraphics.drawLine(x, 0, 0, x); }//for g.drawImage(memImage, 0, 0, this); } }
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | java date/timeOddelek: Programiranje | 1493 (1176) | Slovenet |
» | [Java] Zasnova shoot em up igreOddelek: Programiranje | 1190 (869) | PecenkA |
» | java / mysql / počasne poizvedbeOddelek: Programiranje | 748 (677) | BRBR |
» | [Java] QuicksortOddelek: Programiranje | 730 (566) | MrBrdo |
» | [JAVA] System_currentTimeMillis()??Oddelek: Programiranje | 807 (807) | kunigunda |