WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Eigene Java Klasse aufrufen

 

paul

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.10.2007, 19:54     Titel: Eigene Java Klasse aufrufen
  Antworten mit Zitat      
Hallo
Objekte aus Klassen der Java API in Matlab zu laden ist recht einfach. Nun wollte ich aber eine selbst erstellte Java Klasse laden, habs aber nicht geschafft.
Kann mir vielleicht jemand sagen was ich falsch mache?

Hier meine eifache Java Klasse Test.class (ist aus Frame abgeleitet und soll lediglich einen String ins Fenster zeichnen):
Code:

import java.awt.Frame;
import java.awt.Graphics;
public class Test extends Frame{
   
   public String s="ein Text";   //default
   //Konstruktoren-----------------
   public Test(String str){
      s=str;
      doIt();
   }
   public Test(){
      doIt();
   }
   public void doIt(){
      setBounds(200,200,200,200);
      setVisible(true);
      repaint();
   }//-----------------------------
   public void paint(Graphics g){
      g.drawString(s, 20, 20);
   }
}//end of class



..compiliert und gespeichert unter C:\javatest\Test.class
..danach in Matlab folgende Befehle ausgeführt:
Code:

javaaddpath C:\javatest % Verz. von Test.class zum dyn. Pfad
clear java              % reload the classes
f=Test();


..dann erscheint die Fehlermeldung:
??? Undefined function or variable 'Test'.

Matlab sollte die Klasse doch jetzt finden? Wo liegt der Hund begraben?

Vielen Dank für Antworten
Gruss Paul


outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 23.10.2007, 11:42     Titel:
  Antworten mit Zitat      
das sollte helfen

How do I use my own Java classes in MATLAB?
http://www.mathworks.com/support/solutions/data/1-179EJ.html



MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
paul

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.10.2007, 17:52     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort.
Leider sehe ich noch immer keinen Fehler in meinem Aufruf. Vielleicht sieht jemand einen Fehler?

Gruss Paul
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 24.10.2007, 14:07     Titel:
  Antworten mit Zitat      
Hallo Paul,

einen Fehler kann ich auch nicht sehen. Funktioniert denn das Hinzufügen an sich? (Abfragen mit >>p = javaclasspath)
Wenn nicht, würde ich es mal mit der Funktionssyntax von javaaddpath probieren, also
Code:
javaaddpath('C:\javatest');


Aus unerfindlichen Gründen streiken manchmal die "Befehls-Syntaxen" (=command syntax).

Ansonsten kenne ich mich wohl zu wenig mit Java aus. Kann man die Klasse denn so als Funktion verwenden? Vielleicht muss man in dem Fall den Pfad auch zum normalen Suchpfad hinzufügen:
Code:
addpath('C:\javatest');

Aber dafür keine Garantie! Smile Nur so meine Idee.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
paul

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2007, 18:40     Titel:
  Antworten mit Zitat      
Hallo Bijick, danke für die Antwort.

Ja das hinzufügen zum javaclasspath funktioniert einwandfrei.
Den Pfad zum normalen Matlab Pfad hinzuzufügen half leider auch nichts.

Ja, Java Objekte kann man in Matlab direkt aus Klassen erzeugen, indem man ihren Konstrukor aufruft. Mit Klassen der integrierten Java API funktioniert das tip top. Ein Frame erzeuge ich z.B so:
Code:

f=java.awt.Frame('testFenster'); %Objekt erzeugen
f.setBounds(200,200,200,200);
f.setVisible(true);

..erzeugt ein Frame-objekt im Matlab Workspace. Nach aufruf der Methode setVisible() des Objektes wird das Fenster dann schön brav dargestellt.

Habe die Java Klasse jetzt sogar mit älteren versionen compiliert. Auch dies brachte den gewüschten Erfolg nicht

Gruss Paul
 
Michaela
Forum-Century

Forum-Century


Beiträge: 239
Anmeldedatum: 12.07.07
Wohnort: ---
Version: bis 2007b
     Beitrag Verfasst am: 25.10.2007, 06:02     Titel:
  Antworten mit Zitat      
Habe gerade gelesen, dass deine Klasse heissen
Code:
soll. Tipp doch mal
Code:
ein, um zu gewährleisten dass es nicht im Suchpfad bereits eine Funktion desselben namens gibt...


Damit bin ich zu Anfangs-Programmierzeiten mal kräftig reingefallen, als ich unter linux mein erstes C-Programm test.c nannte - test gibt es auch als reguläre unix funktion...
_________________

---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
Private Nachricht senden Benutzer-Profile anzeigen
 
paul

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.10.2007, 18:00     Titel:
  Antworten mit Zitat      
Danke für den Tip. Habs getestet, das ist auch nicht das Problem. Im Gegenteil, es wird gar keine Funktion mit Namen Test gefunden.
Meine Fehlermeldung ist ja gerade: ??? Undefined function or variable 'Test'. Die Klasse wird einfach nicht gefunden, obwohl der Pfad zu ihr im javaclasspath eingetragen ist.

Habs den Aufruf noch folgendermassen versucht:
Code:
f=javaObject('Test')


..und bekam wieder eine Meldung dass die Klasse nicht gefunden wird:
??? Error using ==> javaObject
No class Test can be located on Java class path.

Warum wohl?

Gruss Paul
 
Sven

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.11.2007, 20:49     Titel:
  Antworten mit Zitat      
Hast du den Tip von outsider genau beachtet ?

http://www.mathworks.com/support/solutions/data/1-179EJ.html

Was liefert denn in Matlab der Aufruf:
version -java

und dies im Vergleich zur Kommandozeile:
java -version

ggf. musst du z.B. per javac -target 1.4 Test.java für eine ältere als die installierte Javaversion kompilieren.

Hatte dieses Problem auch mal. Hat ewig gedauert bis mir auffiel, dass ich keine für Java 6 kompilierte Klasse laden kann.
 
paul

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.11.2007, 20:09     Titel:
  Antworten mit Zitat      
He danke Sven.

Du hast Recht gehabt. Es lag wirklich an unterschiedlichen Versionen. Hatte früher schon versucht die Java Klasse für ältere VM's zu kompilieren aber habe da wohl etwas falsch gemacht. Jetzt funktionierts!
Danke nochmals,
gruss Paul
 
Jonas123456

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.01.2011, 13:14     Titel:
  Antworten mit Zitat      
Hallo,

ich habe dasselbe Problem, jedoch sind die Java Versionen identisch (beide 1.6). Aber dennoch möchte Matlab meine Klassen aus meinem Package nicht laden. Habe es nach der Anleitung von Matlab gemacht, hat aber nichts gebracht.
(http://www.mathworks.com/help/techdoc/matlab_external/f4863.html)

Auch mit import geht es nicht. Habe schon überprüft ob der Pfad in javaclasspath kommt und da ist er auch. Er kann aber nicht die darin enthaltenen Klassen finden, geschweige denn ein Objekt draus erzeugen.

Hat jemand noch eine Idee?

Gruß,
Jonas
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2011, 12:20     Titel:
  Antworten mit Zitat      
hei!
hab grad ein ähnliches problem. kann eine klasse eines drittanbieters nicht laden. vielleicht muss du die library in librarypath.txt noch eintragen(also verzeichnis). oder mit import nochmal die klasse nachladen...

aber mein problem ist auch das ich mich nicht wirklich mit java auskenn Sad
good luck!!
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.