Wykonywalny plik jar nie reaguje

0

Witam
Exportowałem z poziomu Eclipse program do pliku wykonywalnego jar. Jednak gdy odpalam go dwuklikiem program nie reaguje.
Zrobiłem wszystko tak jak napisali tutaj: http://www.if.pw.edu.pl/~ertma[...]orium_6:Tworzenie_plik%F3w_JAR

Zaznaczyłem nawet gdzie ma się zapisać plik manifest i zapisałem go w folderze z programem. Jednakże ciągle program nie reaguje.
Czy to możliwe, że powodem jest pięć klas, które posiadają metodę main? Mimo to przecież zaznaczyłem, która klasa ma posiadać tą metodę i która ma być tą rozruchową a w menu do wyboru miałem dwie. Ktoś może coś podpowiedzieć? Mam aktualną javę, poza tym kiedy mój program miał otwierać tylko jedno okienko po wciśnięciu odpowiedniego przycisku (każda klasa otwierająca jakieś okienko posiada metodę main.) To plik normalnie się odpalał, kiedy jednak zrobiłem resztę czyli pozostałe okienka to zaczęły się problemy. Jednak przy exporcie nie wyświetlało żadnych błędów.

Proszę o pomoc. Męczę się z tym od dłuższego czasu i nie mogę znaleźć nawet wskazówki.

Plik manifest na pewno znajduje się w archiwum jar.

EDIT: Dodam jeszcze, że z poziomu eclipse działa bez zarzutów.

Zamieszczę jeszcze kod każdej z klasy.

package CV;
import javax.swing.*;
public class Frame extends JFrame {
	
	/**
	 * 
	 */
	

	public Frame() {
		setSize(400, 350);
		setTitle("Curiculum Vite");
		setLocation(800,350);
	}
	
	public static void main(String[] args) {
		Frame rama = new Frame();
		Panel menu = new Panel();
		Zdjecie fota= new Zdjecie();
		rama.setLayout(null);
		rama.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JLabel tekst = new JLabel("Mój życiorys");		
		rama.add(tekst);
		tekst.setBounds(130, 35, 120, 20);
		rama.add(fota);
		fota.setBounds(100, 75, 150, 150);
		tekst.setText("Mój życiorys.");	
		rama.add(menu);
		menu.setBounds(-65, 250, 500, 200);
		
		
		
		
		
		rama.setVisible(true);
	}

}
 
 package CV;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Panel extends JPanel implements ActionListener {
	
	/**
	 * 
	 */
	
	private JButton Ja;
	private JButton Praca;
	private JButton Zainteresowania;
	
	public Panel(){
		
		
		Ja = new JButton("O mnie");
		Praca = new JButton ("Kariera");
		Zainteresowania = new JButton("Zainteresowania");
		
		add(Ja);
		add(Praca);
		add(Zainteresowania);
		
		Ja.addActionListener(this);
		Praca.addActionListener(this);
		Zainteresowania.addActionListener(this);
		
		setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		Object source = e.getSource();
		if (source == Ja)
			O_mnie.Ja(null);
		if (source == Praca)
			PrzebiegPracy.Przebieg(null);
		if (source == Zainteresowania)
			Zainteres.Zainter(null);
			
		
	}
	

	
	

}
package CV;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class Zdjecie extends JPanel {
	
	/**
	 * 
	 */
	
	private BufferedImage image;

	public Zdjecie() {
		super();

		File imageFile = new File("Ja.jpg");
		try {
			image = ImageIO.read(imageFile);
		} catch (IOException e) {
			System.err.println("Blad odczytu obrazka");
			e.printStackTrace();
		}

		Dimension dimension = new Dimension(image.getWidth(), image.getHeight());
		setPreferredSize(dimension);
	}

	@Override
	public void paintComponent(Graphics g) {
		Graphics2D g2d = (Graphics2D) g;
		g2d.drawImage(image, 0, 0, this);
	

	}

}
 
package CV;

import javax.swing.JFrame;

public class O_mnie extends JFrame {
	
	/**
	 * 
	 */
	

	public O_mnie() {
		setSize(400, 350);
		setTitle("O mnie");
		setLocation(900,350);
		
	}
	
	public static void Ja(String[] args) {
		
		O_mnie okienko = new O_mnie();
		okienko.setLayout(null);
		okienko.setDefaultCloseOperation(DISPOSE_ON_CLOSE);;
		okienko.setVisible(true);
		
	}

}
 
package CV;

import javax.swing.JFrame;

public class PrzebiegPracy extends JFrame {
	
	/**
	 * 
	 */
	

	public PrzebiegPracy() {
		setSize(400, 350);
		setTitle("O mnie");
		setLocation(900,350);
		
	}
	
	public static void Przebieg(String[] args) {
		
		PrzebiegPracy Kariera = new PrzebiegPracy();
		Kariera.setLayout(null);
		Kariera.setDefaultCloseOperation(DISPOSE_ON_CLOSE);;
		Kariera.setVisible(true);
		
	}

}
 
package CV;

import javax.swing.JFrame;

public class Zainteres extends JFrame {
	
	/**
	 * 
	 */
	

	public Zainteres() {
		setSize(400, 350);
		setTitle("O mnie");
		setLocation(900,350);
		
	}
	
	public static void Zainter(String[] args) {
		
		Zainteres Hobby = new Zainteres();
		Hobby.setLayout(null);
		Hobby.setDefaultCloseOperation(DISPOSE_ON_CLOSE);;
		Hobby.setVisible(true);
		
	}

}
 
package CV;
import javax.swing.*;
public class Okno extends JFrame {
	
	/**
	 * 
	 */
	

	public Okno() {
		setSize(400, 350);
		setTitle("Curiculum Vite");
		setLocation(800,350);
	}
	
	public static void main(String[] args) {
		Okno okienko = new Okno();
		okienko.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			
		
		
		
		
		
		
		okienko.setVisible(true);
	}

}
 

Klasa frame jest zawsze zaznaczona podczas eksportu jako ta główna zawierająca main. A klasa okno to wynik eksperymentów. ;)

0

Przeczytaj i zamieść na forum komunikaty błędów. Otwórz konsolę, przejdź do katalogu z plikiem jar i wpisz polecenie java -jar nazwaJara.

0

javax.imageio.IIOException: Can't read input file!
at javax.imageio.ImageIO.read(Unknown Source)
at CV.Zdjecie.<init>(Zdjecie.java:23)
at CV.Frame.main(Frame.java:19)
Exception in thread "main" java.lang.NullPointerException
at CV.Zdjecie.<init>(Zdjecie.java:29)
at CV.Frame.main(Frame.java:19)

Przyjrzałem się komunikatowi ze zdjęciem, jednakże zdjęcie jest w katalogu z programem. Więc chyba nie powinno być problemu.

EDIT: Ogarnąłem, zdjęcie faktycznie było w katalogu, jednakże było folder za "wysoko" i go nie spakowało. Teraz działa bez problemów. Dzięki za pomoc. Bo w życiu bym nie ogarnął tego sam.

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