Anmelden mit
Registrieren | Anmelden

[Java] .class ausführen (Linux vs. Win vs. Mac)

Letzte Antwort: in Softwareanwendungen

Hallo!

Ich habe hier ein kleines aber feines Problem mit einer sogenannten *.class Datei.

Die beinhaltet ein Javaprogramm, dass Blickbewegungsmessungen umrechnet. Soweit so gut. Ich habe hier im Moment drei (eigentlich 2,5) Rechner:
1) Windows 7 Pro x64
2) Debian Linux x64, 5.03 (Letzte stable-Version)
3) Mac OS-X 10.4.11 (Aktualisiert)


Folgend gehen die Systeme mit der class-Datei um:

Win 7, via cmd:
  1. E:\CoLi\1310\Filter>java e:\CoLi\1310\Filter\Filter
  2. Exception in thread "main" java.lang.NoClassDefFoundError: e:\CoLi\1310\Filter\
  3. ilter
  4. Caused by: java.lang.ClassNotFoundException: e:\CoLi\1310\Filter\Filter
  5. at java.net.URLClassLoader$1.run(Unknown Source)
  6. at java.security.AccessController.doPrivileged(Native Method)
  7. at java.net.URLClassLoader.findClass(Unknown Source)
  8. at java.lang.ClassLoader.loadClass(Unknown Source)
  9. at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
  10. at java.lang.ClassLoader.loadClass(Unknown Source)
  11. at java.lang.ClassLoader.loadClassInternal(Unknown Source)
  12. Could not find the main class: e:\CoLi\1310\Filter\Filter. Program will exit.


Linux, via Shell:
  1. marcel@debian:~/1310/Filters$ java Filter.class
  2. Exception in thread "main" java.lang.NoClassDefFoundError: Filter.class at gnu.java.lang.MainThread.run(libgcj.so.90)
  3. Caused by: java.lang.ClassNotFoundException: Filter.class not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:./], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
  4. at java.net.URLClassLoader.findClass(libgcj.so.90)
  5. at java.lang.ClassLoader.loadClass(libgcj.so.90)
  6. at java.lang.ClassLoader.loadClass(libgcj.so.90)
  7. at gnu.java.lang.MainThread.run(libgcj.so.90)


Mac:
Es läuft durch einen simplen Doppelklick auf die Datei, oder den konsolenbefehl Filter.class im Ordner. Infos gibt mir das Kerlchen aber nicht...

Prinzipiell läuft sie, darum gehts, aber ich würde sie schon gerne nicht auf dem Uralt-iBook ausführen.

Hat irgendjemand eine IDee wie man die Datei unter Windows oder Linux zum Arbeiten bringen könnte?

Vielen Dank im Voraus!

Werbung stört? Dann Mitgliedskonto eröffnen

Beim Syntax des Java Befehls, gibt man den Klassennamen ohne .class an. Also z.B.:

  1. E:\CoLi\1310\Filter>java Filter


Allerdings ist es sehr unüblich, dass eine Klasse kein Package hat, so dass obiges schief gehen kann. Dann muss man die Wurzel finden, um von dort einen Packagenamen angeben zu können. Der Packagename entspricht dabei dem Verzeichnis. Man geht dann eine Verzeichnishierarchie höher falls man weiterhin "Class not found" erhält u. tippt:

  1. E:\CoLi\1310>java Filter.Filter


Wenn Du den Quellcode noch hast, dann schaust in die 1. Zeile vom Filter.java - dort steht auch der Packagename drin.

Es ist generell sehr unüblich Java Code OHNE .bat; .cmd; .sh Startdateien auszuliefern. Und wenn man ohne Startdateien ausliefert, dann gibt's irgendwo in deinem Programm möglicherweise eine .jar Datei. Diese enthält alle benötigten .class Dateien zusammengezippt zusammen mit einer Konfigurationsdatei MANIFEST.MF, die beschreibt wo die "main" Klasse ist. Starten geht dann einfacher, da man nichts über die Organisation in Packages u. Startdateien wissen muss:

  1. E:\CoLi\1310\Filter>java -jar Filter.jar


Ich sehe Du hast ein GNU Java auf der Debian Lenny Kiste. Das ist weder schnell noch kompatibel. Nimm die SUN JRE (Java Runtime Environment):
http://packages.debian.org/lenny/sun-java6-jre

  1. sudo apt-get install sun-java6-jre
  2. sudo apt-get purge gij gij-4.3

Oké, da lässt sich was mit anfangen *g*

Danke schonmal für die Tips, ich habe jetzt dank dem weglassen von "class" nicht mehr das Fehlen der Main-Class als Fehler, sondern nur noch folgendes (Bei der Windows-Maschine, Linux folgt später):

  1. E:\CoLi\1310\Filter>java Filter
  2. Exception in thread "main" java.lang.NullPointerException
  3. at javax.swing.text.JTextComponent.getText(Unknown Source)
  4. at DoubleTextField.isValid(FilterGUI.java:2798)
  5. at java.awt.Component.invalidateIfValid(Unknown Source)
  6. at java.awt.Component.setLocale(Unknown Source)
  7. at javax.swing.JComponent.<init>(Unknown Source)
  8. at javax.swing.text.JTextComponent.<init>(Unknown Source)
  9. at javax.swing.JTextField.<init>(Unknown Source)
  10. at javax.swing.JTextField.<init>(Unknown Source)
  11. at DoubleTextField.<init>(FilterGUI.java:2786)
  12. at FilterGUI.initComponents(FilterGUI.java:193)
  13. at FilterGUI.<init>(FilterGUI.java:131)
  14. at Filter.<init>(Filter.java:21)
  15. at Filter.main(Filter.java:27)


Anbei die Datei Filter.java
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4.  
  5. /* This Class controls the three main classes of the FILTER
  6.  
  7. DataSharing, which is the router between the GUI (FilterGUI) and AscFilter
  8. AscFilter conducts the entire filtering process
  9. FilterGui manages the user interface
  10. */
  11. class Filter
  12. {
  13. private static final int MAX_MESSAGES = 16; // # different message types
  14. private static final int MAX_ITEMSOFINTEREST = 300; //# Items included
  15. private static final int MAX_PARAMETERS = 20; // # parameters +1 (also applies to MSG)
  16.  
  17. public Filter()
  18. {
  19. /*DataSharing dataSharingInterface =
  20. new DataSharing(MAX_MESSAGES,MAX_ITEMSOFINTEREST, MAX_PARAMETERS);*/
  21. FilterGUI newForm = new FilterGUI();
  22. newForm.show();
  23. }
  24.  
  25. public static void main(String[] args)
  26. {
  27. Filter newMainFilter = new Filter();
  28. }
  29. }

Der stürzt jetzt ab weil im Konstruktor der Klasse "DoubleTextField", die in der Datei FilterGUI.java definiert ist etwas schief geht. Das kann sein, dass das mit älteren Java Versionen mal so funktioniert hat, aber inzwischen nicht mehr funktioniert. Möglicherweise genügt aber auch schon ein neu übersetzen der .java -> .class Dateien.

Kannst mir das Programm mal per .zip schicken. Also vermutlich den gesamten Filter Ordner? Fragst mich per PN nach e-mail oder lädst es bei Rapidshare hoch oder nennst mir die Quelle wo man das Programm herunterladen kann.

Ich übersetz' das u. sollten Fehlerbehebungen für neue Java Versionen notwendig sein, so behebe ich sie.

bg,
7oby
Werbung stört? Dann Mitgliedskonto eröffnen