Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
dvorak.vit94
Člen
Avatar
dvorak.vit94:30.3.2015 21:30

Mám problém s projektem. Jsou to staré dobré Puzzle. Kód jsem napsal i částečně podle internetu. Ale stále mě to píše chybu v consoli:

Exception in thread "main" java.lang.NullPo­interException
at javax.swing.I­mageIcon.<init>(Un­known Source)
at Puzzle.<init>(Puz­zle.java:45)
at Puzzle.main(Puz­zle.java:84)

Programuji v Eclipsu. A zdrojový kód případně dodám. :)
Předem díky za pomoct a radu.

 
Odpovědět
30.3.2015 21:30
Avatar
MrPabloz
Člen
Avatar
Odpovídá na dvorak.vit94
MrPabloz:30.3.2015 22:03

Bez zdrojáku neporadí nikdo, takže by bylo lepší ho tu dodat :) ale tipuji, že máš null obrázek který někde nastavuješ, tedy asi ho špatně načítáš nebo tak :)

Nahoru Odpovědět
30.3.2015 22:03
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
dvorak.vit94
Člen
Avatar
Odpovídá na MrPabloz
dvorak.vit94:30.3.2015 23:05

import java.awt.Border­Layout;
import java.awt.Dimension;
import java.awt.Grid­Layout;
import java.awt.Image;
import java.awt.even­t.ActionEvent;
import java.awt.even­t.ActionListe­ner;
import java.awt.image­.CropImageFil­ter;
import java.awt.image­.FilteredImage­Source;

import javax.swing.Box;
import javax.swing.I­mageIcon;
import javax.swing.JBut­ton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Puzzle extends JFrame implements ActionListener {

/**
*
*/
private static final long serialVersionUID = 1L;
private JPanel centerPanel;
private JButton button;
private JLabel label;
private Image source;
private Image image;
int[][] pos;
int width, height;

public Puzzle() {
Pozice částí obrazku
pos = new int[][] {
{0, 1, 2},
{3, 4, 5},
{6, 7, 8},
{9, 10, 11}
};

centerPanel = new JPanel();
centerPanel.set­Layout(new GridLayout(4, 4, 0, 0));

Načtení obrazku
ImageIcon sid = new ImageIcon(Puz­zle.class.get­Resource("ice­sid.jpg"));
source = sid.getImage();

width = sid.getIconWidth();
height = sid.getIconHe­ight();

add(Box.create­RigidArea(new Dimension(0, 5)), BorderLayout.NOR­TH);
add(centerPanel, BorderLayout.CEN­TER);

for ( int i = 0; i < 4; i++) {
for ( int j = 0; j < 3; j++) {
if ( j == 2 && i == 3) {
label = new JLabel("");
centerPanel.ad­d(label);
} else {
button = new JButton();
button.addActi­onListener(this);
centerPanel.ad­d(button);
image = createImage(new FilteredImage­Source(source­.getSource(),
new CropImageFilter(j*wid­th/3, i*height/4,
(width/3)+1, height/4)));
button.setIcon(new ImageIcon(image));
}
}
}

setSize(325, 275);
setTitle("Puzzle");
setResizable(fal­se);
setLocationRe­lativeTo(null);
setDefaultClo­seOperation(JFra­me.DISPOSE_ON_CLO­SE);
setVisible(true);
}

public static void main(String[] args) {

new Puzzle();

}
tlačítka
public void actionPerformed(Ac­tionEvent e) {
JButton button = (JButton) e.getSource();
Dimension size = button.getSize();

int labelX = label.getX();
int labelY = label.getY();
int buttonX = button.getX();
int buttonY = button.getY();
int buttonPosX = buttonX / size.width;
int buttonPosY = buttonY / size.height;
int buttonIndex = pos[buttonPosY][but­tonPosX];

if (labelX == buttonX && (labelY - buttonY) == size.height ) {

int labelIndex = buttonIndex + 3;

centerPanel.re­move(buttonIn­dex);
centerPanel.ad­d(label, buttonIndex);
centerPanel.ad­d(button,labe­lIndex);
centerPanel.va­lidate();
}

if (labelX == buttonX && (labelY - buttonY) == -size.height ) {

int labelIndex = buttonIndex - 3;
centerPanel.re­move(labelIndex);
centerPanel.ad­d(button,labe­lIndex);
centerPanel.ad­d(label, buttonIndex);
centerPanel.va­lidate();
}

if (labelY == buttonY && (labelX - buttonX) == size.width ) {

int labelIndex = buttonIndex + 1;

centerPanel.re­move(buttonIn­dex);
centerPanel.ad­d(label, buttonIndex);
centerPanel.ad­d(button,labe­lIndex);
centerPanel.va­lidate();
}

if (labelY == buttonY && (labelX - buttonX) == -size.width ) {

int labelIndex = buttonIndex - 1;

centerPanel.re­move(buttonIn­dex);
centerPanel.ad­d(label, labelIndex);
centerPanel.ad­d(button,labe­lIndex);
centerPanel.va­lidate();
}
}
}

 
Nahoru Odpovědět
30.3.2015 23:05
Avatar
MrPabloz
Člen
Avatar
Odpovídá na dvorak.vit94
MrPabloz:30.3.2015 23:35

Jsi si jistý, že máš dobře cestu k obrázku? Chyba bude v tom, že ho nenajde, tudíž, zkus zčeknout cestu, název, typ, popř. načíst si ho zvlášť a co ti to udělá :)

Nahoru Odpovědět
30.3.2015 23:35
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
dvorak.vit94
Člen
Avatar
dvorak.vit94:31.3.2015 12:09

No myslím že jo. Ten obrázek je normálně vložen v tom projektu. Takže nevím. Ale zkusím to ještě.

 
Nahoru Odpovědět
31.3.2015 12:09
Avatar
dvorak.vit94
Člen
Avatar
Odpovídá na MrPabloz
dvorak.vit94:31.3.2015 16:52

Tak to mám asi dobře. Fakt nevím kde je chyba.

Editováno 31.3.2015 16:53
 
Nahoru Odpovědět
31.3.2015 16:52
Avatar
MrPabloz
Člen
Avatar
Odpovídá na dvorak.vit94
MrPabloz:31.3.2015 18:17

Skus to tedy takhle. Dej si pozor v jakém package a jak to je přesně umístěné :)

http://www.mkyong.com/…rces-folder/

Nahoru Odpovědět
31.3.2015 18:17
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
dvorak.vit94
Člen
Avatar
Odpovídá na MrPabloz
dvorak.vit94:31.3.2015 18:43

No já nevím, nechceš to zkusit udělat, dát si tam nějakej svůj obrázek. :) dělám v Eclipsu kdyžtak :)

 
Nahoru Odpovědět
31.3.2015 18:43
Avatar
D0ll0k
Člen
Avatar
Odpovídá na dvorak.vit94
D0ll0k:2.4.2015 23:22

Mě to funguje. Kam přesně dáváš ten obrázek? Měl by být ve složce společně se třídou. Když si otevřeš Package Explorer a zkopíruješ ho do package, kde máš třídu Puzzle, už by to nemělo házet chybu :)

Nahoru Odpovědět
2.4.2015 23:22
Veni, vidi, programmato
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.