Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Java » APIs

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
27.02.2009, 16:39 Uhr
KFC Embryo
Ein Huhn


Hallo,

ich habe ein Problem:

Ich hab in mein Java Projekt fremde Libaries eingefügt. Jede dieser Libaries enthält Packages.
Die Packages wiederum enthalten Klassen und die Klassen Methoden, sehe ich das richtig?

Wenn ich jetzt Beispielsweise mit diesen Klassen, Methoden arbeiten möchte muss ich zuerst das gewünschte Package per import in mein code einfügen:


Code:

import de.elo.client.scripting.interfaces*;



Das ich die Libaries richtig in Eclipse eingebunden habe erkenne ich daran, dass eine Autovervollständigung aufgeht.

Wie kann ich jetzt auf die Methoden der Klassen zugreifen?

Wenn z.B. das Package mit dem Namen de.elo.client.scripting.interfaces eine Klasse mit dem Namen WorkspaceAdapter enthält und diese Klasse eine Methode mit dem Namen getWorkspace().

Hab ich bisher versucht folgendermaßen auf die Methode zu zugreifen:


Code:

import de.elo.client.scripting.interfaces.*;

WorkspaceAdapter.getWorkspace(){};



Das geht aber irgendwie nicht, ich bekomme dann immer Fehler wie:


Code:

Syntax error, insert "enum identifier" to complete Enum Header.




Normal müssten doch schon wenn ich WorkspaceAdapter eingebe und strg-Leertaste drücke Lösungsvorschläge auftauchen also die ganzen Methoden die in der Klasse enthalten sind, oder?

Es ist immer schwer so etwas schriftlich zu erklären deswegen hakt am besten nach wenn ihr etwas nicht verstanden habt.

Ich bedanke mich schon einmal.

gruß
--
An nescis, mi fili, quantilla prudentia mundus regatur?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.02.2009, 22:12 Uhr
Lensflare




C++:
WorkspaceAdapter.getWorkspace(){};


hier müssen die geschweiften klammern weg, also:

C++:
WorkspaceAdapter.getWorkspace();


das geht nur, wenn getWorkspace eine statische Methode ist.
Wenn sie nicht statisch ist, dann müsstest du die Klasse instanziieren und von der Instanz die Methode aufrufen:

C++:
WorkspaceAdapter wa = new WorkspaceAdapter(); //Annhame, dass ein Parameterloser Konstruktor gegeben ist
wa.getWorkspace();



Übrigens, falls sich diese Klasse in dem Package interfaces befindet, dann muss man das package so importieren:

C++:
import de.elo.client.scripting.interfaces;


weil du sonst nur die packages importierst, die sich in dem package interfaces befinden, nicht aber interfaces selbst.


EDIT:
Da der Package Name interfaces lautet, nehme ich mal an, dass WorkspaceAdapter ein Interface sein könnte.
In dem Fall müsste es von einer Klasse implementiert werden:

C++:
class Test implements WorkspaceAdapter
{
  //...
}


--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 27.02.2009 um 22:17 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
01.03.2009, 02:00 Uhr
KFC Embryo
Ein Huhn


mh ich kann dir folgen bis auf:

"nehme ich mal an, dass WorkspaceAdapter ein Interface sein könnte."

Ich weiß nicht was du damit meinst.

Und das mit dem Implementieren kapier ich auch nicht so richtig:


Code:
class Test implements WorkspaceAdapter
{
   getWorkspace();
}



meinst du so?

Gruß
--
An nescis, mi fili, quantilla prudentia mundus regatur?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
01.03.2009, 05:13 Uhr
Lensflare



also ein interface ist ähnlich einer Klasse. Es kann von anderen Klassen implementiert werden (vergleichbar mit Ableitung) und es enthält ausschließlich abstrakte Methoden (es steht also nicht fest, was diese Methoden machen).

Um mal zu veranschaulichen, wozu sie gut sind, hier mal ein Beispiel:

Angenommen du hast eine Collection (zB Array), die Instanzen von Klassen enthält. Es sind instanzen unterschiedlicher Klassen, aber alle haben eine Gemeinsamkeit:
Sie können alle in float konvertiert werden.

Diese Gemeinsamkeit beschreibst du, in dem du dafür ein Interface schreibst:

C++:
interface ConvertableToFloat
{
  float convertToFloat();
}



Das Interface weiss nicht was die Methode convertToFloat später tun wird. Die umwandlung zu float kann ja von Klasse zu Klasse unterschiedlich aussehen.

Hier einige Klassen, die dieses Interface implementieren:

C++:
class Bruch implements ConvertableToFloat
{
  public float zaehler;
  public float nenner;
  
  public float convertToFloat()
  {
    return zaehler/nenner;
  }
}

class Vektor2D implements ConvertableToFloat
{
  public float x;
  public float y;

  public float convertToFloat()
  {
    return wurzel(x*x + y*y); //Die Konvertierung des Vektors in float soll seine Länge zurückgeben.
  }
}



Nun das Array:

C++:
ConvertableToFloat[] a = new ConvertableToFloat[3];
a[0] = new Bruch();
a[1] = new Bruch();
a[2] = new Vektor2D();


Es stellt eine Sammlung von Instanzen dar, deren Klassen dieses Interface implementieren.
Man kann nun das Array durchgehen und von jeder Klasseninstanz die Methode convertToFloat() aufrufen.
Egal was für Klassen drin sind, es ist sichergestellt, dass sie sich mit der Methode convertToFloat() in float umwandeln können.

Ein Interface (deutsch: Schnittstelle) sagt also nur was eine Klasse nach außen für den Zugriff bereistellen muss.
In unserem Fall ist es die Möglichkeit sich als float darzustellen.



Was dein Projekt angeht, ich weiss nicht ob dieses Interface von der Library intern verwendet wird und es da schon Klassen gibt, die es implementieren, oder ob es so gedacht ist, dass man es selbst in den eigenen Klassen implementiert.

Gibt es da keine Beispiele oder Tutorials für diese Lib?
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 01.03.2009 um 05:23 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
01.03.2009, 23:07 Uhr
KFC Embryo
Ein Huhn


ah ok das hat mir geholfen.

Ich Versuch deine Frage mal zu beantworten:

In erster Linie geht es mir darum, dass die Autovervollständigung greift. Das passiert wenn die Methoden an richtiger stelle hingeschrieben und die Pakete richtig importiert wurden. Das Problem hatte ich ja in meinem ersten Post erläutert.

Mein Projekt ist in dem Sinne eigentlich kein richtiges Projekt.
Was ich in Eclipse schreibe, wird wenn es fertig ist, als Script in ein Programm eingebunden. Dort sind die nötigen Strukturen vorhanden (Administration -> Scripting Base)
Dort kann es an Events knüpfen z.B. ScriptButton9Start().

Das Problem war bisher, wenn ich die Scripte in einem Texteditor schreibe dass ich keine Hilfe, sprich Autovervollständigung, habe. Aber auch die Autovervollständigung habe ich in Eclipse auch nur dann wenn ich die API des Prgrammes einbinde.

Folgendes Script kann nie in Eclipse laufen weil ich keine GUI habe.


Code:
workspace.showInfoBox("Test","Test")



Hier geht es einfach nur darum das sich die Klasse und Methoden automatisch vervollständigen und Syntaxfehler Rar bleiben, um Fehler von dieser Seite einzuschränken.

gruß
--
An nescis, mi fili, quantilla prudentia mundus regatur?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.03.2009, 07:49 Uhr
Lensflare



also hast du das mit den imports gelöst oder geht die Autovervollständigung immer noch nicht?
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
02.03.2009, 12:01 Uhr
KFC Embryo
Ein Huhn


Sorry hatte jetzt erst die Gelegenheit es zu testen.
Wenn ich das Package so importieren wie du es sagst bekomme ich folgenden Fehler:


Zitat:

Only a type can be imported. de.elo.client.scripting.interfaces resolves to a package



Ich sehe das wenn ich

Code:
de.elo.client.scripting.interfaces



schreibe eine Autovervollständigung aufklappt und mir diverse Klassen anbietet.
Aber die Autovervollständigung bei den Methoden bleibt aus.
Es kommen zwei Fehler:
Aufruf:


Code:
WorkspaceAdapter.getWorkspace();



Fehler:

- Syntax error, insert "EnumBody" to complete EnumDeclaration
- Syntax error, insert "enum Identifier" to complete EnumHeader

Woran könnte es liegen?

Danke.
Gruß
--
An nescis, mi fili, quantilla prudentia mundus regatur?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
02.03.2009, 18:33 Uhr
Lensflare




Zitat:

Aber die Autovervollständigung bei den Methoden bleibt aus.
Es kommen zwei Fehler:


Hast du geschaut ob es eine Klasse ist oder ein Interface?

Poste evtl. mal den Inhalt der Java Datei, in der sich WorkspaceAdapter befindet.
Die Datei sollte im Ordner "interfaces" sein.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
05.03.2009, 16:26 Uhr
KFC Embryo
Ein Huhn


Hi,

sorry das ich mich erst jetzt noch einmal melde.

Ich weiß woran es lag.
Das Problem war das ich kein Objekt erzeugt habe.

Mit dem ich dann die Methoden aufrufe. Das war ein denk Fehler von mir.
Jetzt geht es. Trotzdem danke für die Hilfe.

Gruß
--
An nescis, mi fili, quantilla prudentia mundus regatur?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
05.03.2009, 20:40 Uhr
Lensflare



das habe ich schon im ersten Posting geschrieben.

Zitat:

das geht nur, wenn getWorkspace eine statische Methode ist.
Wenn sie nicht statisch ist, dann müsstest du die Klasse instanziieren und von der Instanz die Methode aufrufen


instanziieren = Objekt erzeugen.
Das wusstest du wahrscheinlich nicht oder?
Hättest einfach fragen können
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Java ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: