Hallo....
Ich habe mit Hilfe der App Library compiler ein Matlab scribt in eine Java Datei umgewandelt. Ich bekomme nun 3 Ordner. Wenn ich in den Ordner for_testing gehe finde ich mein Programm Test2.jar. Mein Problem ist jetzt das ich dieses aber nicht öffnen kann. Weder in der Bash noch wenn ich darauf klicke. Ich bekomme keine Fehlermeldung oder sonstiges. Es reagiert einfach nicht. Ich habe jetzt versucht eine Textdatei.bat mit den Inhalt java -jar und den Programmnamen zu erstellen und somit zu öffnen und bekomme die Fehlermeldung: kein Hauptmanifestattribut, in Test2.jar. Hab die Meldung gegoogelt und offensichtlich fehlt die Main-Class.
Hat jemand damit Erfahrung und kann mir weiterhelfen? Fange mit dem Begriff Main-Class nicht viel an.
Danke schon mal für die Hilfe!
Danke für die Hilfe! Das bringt mich schon mal weiter! Ich bekomme beim kompelieren allerdings eine Fehlermeldung mit der ich leider nicht viel anzufangen weiß:
Code:
.\getmagic.java:1: error: package com.mathworks.toolbox.javabuilder does not exist
import com.mathworks.toolbox.javabuilder.*;
^
.\getmagic.java:2: error: package makesqr does not exist
import makesqr.*;
^
error: Class names, 'makesqr.jar', are only accepted ifannotation processing is explicitly requested
.\getmagic.java:8: error: cannot find symbol
MWNumericArray n = null;
^
symbol: class MWNumericArray
location: class getmagic
.\getmagic.java:10: error: cannot find symbol
Class1 theMagic = null;
^
symbol: class Class1
location: class getmagic
.\getmagic.java:20: error: cannot find symbol
n = new MWNumericArray(Double.valueOf(args[0]),
^
symbol: class MWNumericArray
location: class getmagic
.\getmagic.java:21: error: cannot find symbol
MWClassID.DOUBLE);
^
symbol: variable MWClassID
location: class getmagic
.\getmagic.java:23: error: cannot find symbol
theMagic = new Class1();
^
symbol: class Class1
location: class getmagic
.\getmagic.java:34: error: cannot find symbol
MWArray.disposeArray(n);
^
symbol: variable MWArray
location: class getmagic
.\getmagic.java:35: error: cannot find symbol
MWArray.disposeArray(result);
^
symbol: variable MWArray
location: class getmagic
10 errors
Ich bin genauso vorgegangen wie in dem von dir geteilten Link. Ich habe einzig und allein meinen Ordener mit der Java Datei am Desktop verschoben. Hast du dafür eine Lösung?
Eigentlich so wie es beschrieben steht. Meine Pfad ist allerdings ein anderer weil ich keinen mcrroot Ordner habe. Ich habe allerdings den Pfad zu meinen javabuilder.jar angegeben!
Ich bekomme dann folgende Fehlermeldung:
Code:
javac -classpath "C:\Program Files\MATLAB\R2016b\toolbox\javabuilder\jar":.\makesqr.jar .\getmagic.java
.\getmagic.java:1: error: package com.mathworks.toolbox.javabuilder does not exist
import com.mathworks.toolbox.javabuilder.*;
^
.\getmagic.java:2: error: package makesqr does not exist
import makesqr.*;
^
.\getmagic.java:8: error: cannot find symbol
MWNumericArray n = null;
^
symbol: class MWNumericArray
location: class getmagic
.\getmagic.java:10: error: cannot find symbol
Class1 theMagic = null;
^
symbol: class Class1
location: class getmagic
.\getmagic.java:20: error: cannot find symbol
n = new MWNumericArray(Double.valueOf(args[0]),
^
symbol: class MWNumericArray
location: class getmagic
.\getmagic.java:21: error: cannot find symbol
MWClassID.DOUBLE);
^
symbol: variable MWClassID
location: class getmagic
.\getmagic.java:23: error: cannot find symbol
theMagic = new Class1();
^
symbol: class Class1
location: class getmagic
.\getmagic.java:34: error: cannot find symbol
MWArray.disposeArray(n);
^
symbol: variable MWArray
location: class getmagic
.\getmagic.java:35: error: cannot find symbol
MWArray.disposeArray(result);
^
symbol: variable MWArray
location: class getmagic
9 errors
Ich habe ein Semikolon mit einen Doppelpunkt vertauscht und jetzt lässt es sich tatsächlich kompelieren! Danke einmal dafür! Das einzige Problem was ich jetzt noch habe ist, dass wenn ich es wie in Schritt 17 ausführen möchte die Fehlermeldung:
Zitat:
java -classpath.;"C:\Program Files\MATLAB\MATLAB Runtime\v91\toolbox\javabuilder\jar\javabuilder.jar";.\makesqr.jar getmagic 5
Unrecognized option: -classpath.;C:\Program Files\MATLAB\MATLAB Runtime\v91\toolbox\javabuilder\jar\javabuilder.jar;.\makesqr.jar
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
kommt. Der einzige Unterschied bei mir ist, dass ich in MATLAB Runtime und nicht compiler Runtime bin. Außerdem finde ich dort den Ordner v91 und nicht v82 aber ich denke das liegt an der Version oder irre ich mich da?
Es funktioniert tatsächlich! Da wäre ich jetzt lange nicht drauf gekommen!! Danke danke danke!!! Du hast mir wirklich extrem weiter geholfen! Ich nehme an mit anderen Matlab Funktionen geht das genauso?
Danke nochmals!
prinzipiell ja. Du musst halt darauf achten, dass der Java-Code deine Funktion mit sinnvollen Argumenten füttert und die Ergebnisse dann sinnvoll weiterverarbeitet werden.
Eine Frage hätte ich allerdings noch:
Bei Punkt 15 kopiere ich einen Text und öffnen ihn anschließend mit den Editor. Bleibt der Text bei anderen Funktionen gleich? Bis auf den Namen meines Matlab Programms natürlich also zum Beispiel getmagic.
Tut mir leid das ich das Thema welches eigentlich schon abgehackt war nochmals anspreche aber ich habe nun eine spezielle Funktion bei der ich nun etwas Hilfe bräuchte.
%d_pp=dicomread(h);
%--------------------------------------------------------------------------
is=matrix; % image size
np=is*is; % number of pixels
%--------------------------------------------------------------------------
% convert images to vectors
v=zeros(np,1);
d=zeros(np,ni);
for i=1:ni
v(:)=d_pp(:,:,:,i);
d(:,i)=v;
end clear d_pp h
%--------------------------------------------------------------------------
% PRINCIPAL COMPONENT ANALYSIS - for variants and details cf Matlab help
%[coeff,score,latent]=pca(zscore(d));
%[coeff,score,latent]=pca(d);
%[coeff,score]=princomp(zscore(d));
[cf,P]=princomp(d); %(:,4:13));
%--------------------------------------------------------------------------
%[fc,~,~,~,F]=factoran(d,nf,'rotate','varimax','scores','wls','maxit',5000);
[fc,~,~,~,F]=factoran(d,nf,'rotate','varimax','scores','wls','maxit',7000);
% rotate - for details cf Matlab help % none % equamax % orthomax % parsimax % pattern % procrustes % promax % quartimax % varimax % scores - for details cf Matlab help % wls or Bartlett % regression or Thomson
%--------------------------------------------------------------------------
%--------------------------------------------------------------------------
% extraction of factor curves
m=max(F);
end for i=(nf+1):2*nf
%subplot(2,nf,i);
%plot(C(:,i-nf),'o-');
%grid on
%set(gca,'XLim',[0,11],'YLim',[0,35]);
%ts=['FACTOR CURVE ',int2str(i-2)];
%title(ts,'FontSize',12);
end
%--------------------------------------------------------------------------
Geschrieben hab das Programm nicht ich aber mir wurde die Aufgabe zugeteilt es in einen Java code zu verpacken. Es lässt sich auch kompelieren nur ich bekomme beim ausführen die Fehlermeldung
Zitat:
java -classpath .;"C:\Program Files\MATLAB\MATLAB Runtime\v91\toolbox\javabuilder\jar\javabuilder.jar";.\facorImage3.jar getmagic 5
Exception in thread "main" java.lang.NoClassDefFoundError: factorImage3/Class1
at getmagic.main(getmagic.java:36)
Ich nehme an das es daran liegt, dass als input in die Funktion unter anderem eine Matrix verlangt wird und ich überhaupt nur einen Wert eingebe. Wie kann ich in die Kommandozeile aber eine Matrix eingeben und ist für dich ersichtlich was alles an input Werten verlangt wird?
Danke schon mal im Voraus!
wenn jemand eine Funktion weitergibt, sollte er sie immer sauber dokumentieren - zumindest die Ein- und Ausgabeargumente.
Bevor man einen Aufruf einer MATLAB-Funktion aus Java bewerkstelligen kann, muss man wissen, wie die Funktion aus MATLAB heraus aufgerufen werden soll. Das ist zumindest mir hier absolut nicht klar.
Für weitere Unterstützung bitte dann auch den zugehörigen Java-Code posten.
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
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.