Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)
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.