Jar mit Eclipse erstellen -->startet nicht

Status
Nicht offen für weitere Antworten.

benner

Aktives Mitglied
Also ich möchte ein Projekt unter Eclipse als Jar-File exportieren. Das habe ich schon mehrmals gemacht und es hat immer funktioniert. Jetzt folgendes: rechte Mousetaste auf das Projekt und die übliche Prozedur, die zu verwendenden Dateien (alle) wählen, Main-Klasse angeben etc. Wird alles erledigt, aber wenn ich dann das Jar-File ausführen will, passiert...nichts! Keine Fehlermeldung, kein Absturz, kein Prozess, der unsichtbar im Hintergrund läuft...obwohl sich eine schöne GUI öffnen sollte, was unter Eclipse natürlich funtioniert.

Ich habe irgendwo einen Beitrag gefunden, wo ein ähnliches Problem auftauchte, allerdings wurde der Threadersteller dort auf irgendeinen Wrapper hingewiesen, der ihm aus dem schönen JarFile eine *.exe gebastelt hat. Das möchte ich definitiv nicht, es soll schon ein Jar-File bleiben.
Ich nutze die CommAPI 2.0 in diesem Projekt, könnte es auch daran liegen? Ich bin langsam am Verzweifeln, da es sonst immer funktioniert hat und ich nicht einemal eine Fehlermeldung als Ansatz habe...
 
@padde
es kommt hundertprozentig eine Exception, er/sie sieht sie nur nicht weil die jar als javaw gestartet wird.
 
Hier die Exception:
Code:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/comm/UnsupportedCommOperationException at Main.main(Main.java:10)

Ich benutze in diesem Programm die JavaComm2.0 API, falls das weiterhilft.
 
was steht den in deiner zeile 10 in der main funktion
poste einfach mal den Quelltex der ersten paar zeilen

#edit oder steht da zufällig ein import? - wenn ja, dann musst du diesen Import IMO irgendwie mit in die .jar komeplieren?
 
In Zeile 10 der Main-Funktion wird die Methode start() dieser Klasse aufgerufen, mehr ist es nicht:
Code:
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;

import javax.comm.CommPortIdentifier;
import javax.comm.SerialPort;
import javax.comm.SerialPortEvent;
import javax.comm.SerialPortEventListener;
import javax.comm.UnsupportedCommOperationException;

public class content extends Frame
{
	static CommPortIdentifier portID;
	InputStream ins;
	OutputStream out;
	static SerialPort serss;
	TextArea ausgabe;
	TextField tfe;
	Button bt;

	public static void start()
	{
		try
		{
			portID = CommPortIdentifier.getPortIdentifier("COM1");
                 	serss = (SerialPort) portID.open("mein_programm",2000);
        	        content f = new content();
        	        f.setSize(330,250);
        	        f.show();
		}
		catch(Exception exc){System.out.println("Fehler :"+exc);}
	}

	public content() 
	{
		this.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				dispose();
				System.exit(0);
			}
		});
		setLayout(new FlowLayout());
		add(tfe=new TextField(40));
		tfe.addActionListener(new sendeListener());
		add(bt=new Button("Senden"));
		bt.addActionListener(new sendeListener());
		add(ausgabe=new TextArea("Port COM1 geöffnet",7,40));
		try 
		{
			ins = serss.getInputStream();
			out = serss.getOutputStream();
			serss.addEventListener(new commListener());
		}
		catch (Exception e) { /*System.out.println("Fehler: "+e);*/}
    
		serss.notifyOnDataAvailable(true);
		try
		{
			serss.setSerialPortParams(	9600,
                                   		SerialPort.DATABITS_8,
                                   		SerialPort.STOPBITS_1 ,
                                   		SerialPort.PARITY_NONE);
			serss.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
		}
		catch (UnsupportedCommOperationException e) {}
	}

	public class sendeListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
//			System.out.println("Ein Signal wurde gesendet");
			ausgabe.setText(ausgabe.getText()+"\nEin Signal wurde gesendet");
			PrintWriter aus = new PrintWriter(out);
			
			aus.print(tfe.getText()+"\r");
			
			
			for(int i=0;i<tfe.getText().length();i++)
			{
				System.out.println("_ "+tfe.getText().charAt(i)+" _");
			}
			
			aus.flush();
			aus.close();
		}
	}

     public class commListener implements SerialPortEventListener
  	{
  		public void serialEvent(SerialPortEvent event) 
  		{
//  			System.out.println("Ein Signal vom COM-Port kam an...");
  			ausgabe.setText(ausgabe.getText()+"\nEin Signal vom Com-Port kam an");
  			System.out.println(event.getOldValue());
  			System.out.println(event.getNewValue());
  			System.out.println(event.getEventType());
  			if(event.getEventType()==SerialPortEvent.DATA_AVAILABLE)
  			{
//  				System.out.println("...dieses war ein gültiges Event");
  				ausgabe.setText(ausgabe.getText()+"\nEs war ein gültiges Event");
  				byte[] readBuffer = new byte[20];
  				  				
  				try 
  				{
  					while (ins.available() > 0) 
  					{
  						int numBytes = ins.read(readBuffer);
  					}
  					String nachricht = new String(readBuffer);
  					ausgabe.append(nachricht);
  				}
  				catch (IOException e) {/*System.out.println("Fehler: "+e);*/}
  			}
  		}
  	}
}
 
das ist nicht der inhalt der Main.java, wo der fehler herkommt :gaen: 😉

javax/comm/UnsupportedCommOperationException at Main.main(Main.java:10);

und Klassen beginnen mit Großbuchstaben !!!
 
mika.fhdw hat gesagt.:
das ist nicht der inhalt der Main.java, wo der fehler herkommt :gaen: 😉
:meld:
benner hat gesagt.:
In Zeile 10 der Main-Funktion wird die Methode start() dieser Klasse aufgerufen, mehr ist es nicht:


Wenn du dir nicht vorstellen kannst, wie das aussehen sollte, dann bitteschön: :###
Code:
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		content.start();
	}

}

Das mit Klassennamen stimmt natürlich, sollte ich wohl mal ändern.
 
Ah, jetzt hab ich's verstanden. 😳
Das kommt davon, wenn man Klassennamen kleinschreibt: Ich hielt content für ein Objekt.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben