NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Avatar
Neaktivní uživatel: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
Neaktivní uživatelský účet
Avatar
MrPabloz
Člen
Avatar
Odpovídá na Neaktivní uživatel
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
Odpovídá na MrPabloz
Neaktivní uživatel: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
Neaktivní uživatelský účet
Avatar
MrPabloz
Člen
Avatar
Odpovídá na Neaktivní uživatel
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
Neaktivní uživatel: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
Neaktivní uživatelský účet
Avatar
Odpovídá na MrPabloz
Neaktivní uživatel: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
Neaktivní uživatelský účet
Avatar
MrPabloz
Člen
Avatar
Odpovídá na Neaktivní uživatel
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
Odpovídá na MrPabloz
Neaktivní uživatel: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
Neaktivní uživatelský účet
Avatar
D0ll0k
Člen
Avatar
Odpovídá na Neaktivní uživatel
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.