ImagePanel problem ze wstawieniem nowego obrazka

0

Witam mam następujący problem, a mianowicie. Chciałbym po naciśnięciu przycisku Aby w oknie pokazywał się obrazek lecz wyskakuje błąd. Błędy występują w podkreślonych miejscach kodu.

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at komorka2.mms$1.actionPerformed(mms.java:117)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6267)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6032)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
package komorka2;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

/**
 *
 * @author czarek
 */
public final class mms extends JFrame {

   JFileChooser fc;
ImagePanel imgpanel;
  
boolean im=false;
    JPanel panel=new JPanel();
DefaultListModel listaModel;
JButton dodajOdb = new JButton("Wstaw odbiorce");
JTextField poleSms = new JTextField();
JLabel napisOdb = new JLabel("MMS do: ");
JTextField poleOdb = new JTextField();
JButton wyslijSms = new JButton("Wyślij mms");
JButton wstawObrazek = new JButton("Wstaw obrazek");
private BufferedImage image;
String dane="";
BufferedImage ikona;

JLabel obrazek=new JLabel();;
	

//JFileChooser   fileChooser ;

public mms(){

  super("MMS");
    setSize(520,700);
    setResizable(false);
    getContentPane().setLayout(new BorderLayout());
    setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
    panel.setBorder(BorderFactory.createEmptyBorder());
    panel.setBackground (new Color(0,50,50));


    listaModel = new DefaultListModel();
    final JList lista=new JList(listaModel);
    lista.setBackground(new Color(155,155,255));
    napisOdb.setForeground(Color.GREEN);
    

    lista.setBounds(350, 150, 150, 300);
    dodajOdb.setBounds(350, 500, 150, 30);
    poleSms.setBounds(50, 200, 100, 100);
    obrazek.setBounds(100, 100, 100, 100);



    napisOdb.setBounds(150, 50, 100, 50);
    poleOdb.setBounds(250, 65, 150, 20);
    poleOdb.setEditable(false);
    wyslijSms.setBounds(100, 500, 150, 30);
   
    wstawObrazek.setBounds(100, 450, 150, 30);

fc=new JFileChooser();
   wstawObrazek.addActionListener(new ActionListener()
		{

			public void actionPerformed(ActionEvent e)
			{

        int returnVal = fc.showOpenDialog(mms.this);
	if (returnVal == JFileChooser.APPROVE_OPTION)
{
	File file = fc.getSelectedFile();

try
{
	Image tmp = ImageIO.read(file);
__	**BufferedImage bi = (BufferedImage) imgpanel.createImage(350, 300);**__
	Graphics2D g = bi.createGraphics();
	g.drawImage(tmp.getScaledInstance(350, 300, Image.SCALE_SMOOTH), 0, 0, null);
	g.dispose();

__	**imgpanel.setImage(bi);
	imgpanel.revalidate();
	imgpanel.repaint();**__
}

	catch(IOException e1)
{
	JOptionPane.showMessageDialog(null, e1.getMessage());
	return;
}}

}});

    panel.add(lista);
    panel.add(dodajOdb);
    panel.add(poleSms);
    panel.add(napisOdb);
    panel.add(poleOdb);
    panel.add(wyslijSms);
    panel.add(wstawObrazek);
    panel.add(obrazek);
  
  

//    panel2.add(fileChooser);
    add(panel);
    panel.setLayout(null);
repaint();





}

}

class ImagePanel extends JPanel {

    Image img;

public ImagePanel(Image img)
{
	setImage(img);
}

public void setImage(Image img)
{
	if(img!=null)
{
	this.setPreferredSize(new Dimension(img.getWidth(null), img.getHeight(null)));
	this.img = img;
}}

public Image getImage()
{
	return img;
}

public void paint(Graphics g)
{
	g.drawImage(img, 0, 0, null);
}
}
0

Deklarujesz pole imgpanel typu ImagePanel, ale nigdzie nie tworzysz obiektu imgpanel. Gdzieś w kodzie umieść imgpanel=new ImagePanel(tu_wpisz_odpowiedni_argument);.

0
 wstawObrazek.addActionListener(new ActionListener()
		{

			public void actionPerformed(ActionEvent e)
			{

        int returnVal = fc.showOpenDialog(mms.this);
	if (returnVal == JFileChooser.APPROVE_OPTION)
{
	File file = fc.getSelectedFile();

try
{

	Image tmp = ImageIO.read(file);
        imgpanel= new ImagePanel(tmp);
        
	BufferedImage bi = (BufferedImage) imgpanel.createImage(350, 300);
	Graphics2D g = bi.createGraphics();
	g.drawImage(tmp.getScaledInstance(350, 300, Image.SCALE_SMOOTH), 0, 0, null);
	g.dispose();

	imgpanel.setImage(bi);
	imgpanel.revalidate();
	imgpanel.repaint();
}

	catch(IOException e1)
{
	JOptionPane.showMessageDialog(null, e1.getMessage());
	return;
}}

}});

Dalej ten sam błąd. Co najdziwniejsze identyczny kod działa w projekcie który kiedyś robiłem i nie wyskakuje żaden błąd.

0

Wkleje działający kod tworzony w JCreator, ten program tworzony jest NetBeans.

package komorka;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;



public class MMS extends JFrame {

	ImagePanel imgpanel;
	JTextField odbiorca;
	JTextField tresc;
	JFileChooser fc;

public MMS()
{
	super("MMS");
	SwingUtilities.invokeLater(new Runnable() {

public void run()
{
	initGUI();
}
});}

private void initGUI()
	{

	setSize(500, 600);
	setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	setLayout(null); // wylaczamy autorozmieszczanie

	odbiorca = new JTextField(Komorka.odbiorca.getText());

	imgpanel = new ImagePanel(null);
	imgpanel.setBounds(50, 50, 350, 300);
	getContentPane().add(imgpanel);

	tresc = new JTextField();
	tresc.setBounds(50, 350, 360, 40);
	getContentPane().add(tresc);

	//imgpanel.setAlignmentY(JComponent.CENTER_ALIGNMENT);

	getContentPane().add(odbiorca);
	odbiorca.setBounds(125, 20, 200, 20);
	odbiorca.setHorizontalAlignment(0);
	odbiorca.setFont(new Font("sansserif", 3, 15));
	odbiorca.setEditable(false);

	JButton przycisk15 = new JButton("dodaj odbiorcę");
	przycisk15.setBounds(50, 420, 150, 30);
	getContentPane().add(przycisk15);
	przycisk15.setVisible(true);

	JButton przycisk16 = new JButton("wyślij wiadomość");
	przycisk16.setBounds(250, 420, 150, 30);
	getContentPane().add(przycisk16);
	przycisk16.setVisible(true);

	JButton przycisk17 = new JButton("wybierz obrazek");
	przycisk17.setBounds(150, 450, 150, 30);
	getContentPane().add(przycisk17);
	przycisk17.setVisible(true);

	setVisible(true);
	fc = new JFileChooser();

	przycisk17.addActionListener(new ActionListener() //
{
	public void actionPerformed(ActionEvent e)
{
	int returnVal = fc.showOpenDialog(MMS.this);
	if (returnVal == JFileChooser.APPROVE_OPTION)
{
	File file = fc.getSelectedFile();

try
{
	Image tmp = ImageIO.read(file);
	BufferedImage bi = (BufferedImage) imgpanel.createImage(350, 300);
	Graphics2D g = bi.createGraphics();
	g.drawImage(tmp.getScaledInstance(350, 300, Image.SCALE_SMOOTH), 0, 0, null);
	g.dispose();

	imgpanel.setImage(bi);
	imgpanel.revalidate();
	imgpanel.repaint();
}

	catch(IOException e1)
{
	JOptionPane.showMessageDialog(null, e1.getMessage());
	return;
}}}});


	przycisk16.addActionListener(new ActionListener() //
{

	public void actionPerformed(ActionEvent e) {
	String odb = odbiorca.getText();

	File plikJPG = new File("MMS_" + odb + ".jpg");
	File plikTXT = new File("MMS_TXT_" + odb + ".txt");

	Image tmp = imgpanel.getImage();

	if(tmp==null)
{
	JOptionPane.showMessageDialog(MMS.this, "Nie wybrano obrazka");
	return;
}

	try
{
	ImageIO.write((RenderedImage)tmp, "JPG", plikJPG);
	odbiorca.setText("");

	String text = tresc.getText();

	FileOutputStream fos = new FileOutputStream(plikTXT);
	fos.write(text.getBytes());
	fos.close();

	tresc.setText("");

	JOptionPane.showMessageDialog(null,"Wiadomość została wysłana");
}

    catch (IOException w)
{
	JOptionPane.showMessageDialog(null,"Błąd zapisu do pliku");
}}});

	przycisk15.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) {
	JFrame okno = new JFrame("MMS"); // tworzenie okna
	okno.setSize(300, 500);
	okno.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	okno.setLayout(null); // wylaczamy autorozmieszczanie
	okno.setVisible(true);
	DefaultListModel listaGraczyModel;
	final JList listaGraczy;
	listaGraczyModel = new DefaultListModel();
	listaGraczy = new JList(listaGraczyModel);
	listaGraczy.setBounds(50, 30, 170, 380);
	okno.getContentPane().add(listaGraczy);
	listaGraczy.setBackground(new Color(155, 155, 255));
	String dane = " ";

	try // wczytywanie danych
{
	int k = 0;

	FileReader plik = new FileReader("kontakty.txt");
	BufferedReader odczyt = new BufferedReader(plik);
	while (dane != null)
{
	dane = odczyt.readLine();
	listaGraczyModel.addElement(dane);
}
	odczyt.close();
}
    catch (IOException w)
{
	JOptionPane.showMessageDialog(null,"Blad odczytu pliku tekstowego");
}

	JButton przycisk15 = new JButton("wybierz");
	przycisk15.setBounds(50, 420, 150, 30);
	okno.getContentPane().add(przycisk15);
	przycisk15.setVisible(true);
	przycisk15.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
		String nazwaP = (String) listaGraczy.getSelectedValue();
		odbiorca.setText(nazwaP);
}});}});}}
package komorka;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.JPanel;


public class ImagePanel extends JPanel {

    Image img;

public ImagePanel(Image img)
{
	setImage(img);
}

public void setImage(Image img)
{
	if(img!=null)
{
	this.setPreferredSize(new Dimension(img.getWidth(null), img.getHeight(null)));
	this.img = img;
}}

public Image getImage()
{
	return img;
}

public void paint(Graphics g)
{
	g.drawImage(img, 0, 0, null);
}
}
0

Po pierwsze, nie wierzę. Po drugie, daj jakiś kod, który można uruchomić i sprawdzić.

0

Właśnie go wstawiłem, sprawdź sobie.

0

http://www.przeklej.pl/plik/komorka-zip-002al07lb6jo
Tu jest link do paczki z działającym programem.

0

java MMS

Exception in thread "main" java.lang.NoSuchMethodError: main

0

Ściągnij sobie całą paczkę którą wrzuciłem. Main znajduje się w klasie komórka. W klasie mms nie ma Main.

0

Ściągnąłem, uruchomiłem, działa.

0

Tak ale to jest poprzedni projekt.
http://www.przeklej.pl/plik/komorka2-zip-002al16ho2mv
Tutaj jest ten który nie działa.

0

Jaja sobie robisz?

1 użytkowników online, w tym zalogowanych: 0, gości: 1