PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : javax.comm runterladen - wo?



Andun
13.02.2006, 14:12
Hi

Da ich mein Roboter am liebsten in Java fernsteuern will, da ich mich darin üben will, (Man wir auch grade im Info LK an der Schule :D also Java meine ich) dachte ich mir, suchste dir ne Klasse die dir den Zugriff auf den COM Port ermöglicht.

Ziemlich schnell hab ich dann auch über Google rausgefunden, dass ich dafür ne extra Erweiterung Namens javax.comm brauche. Bei SUN hab ich aber leider nur das hier gefunden, was eigentlich dass ist was ich brauche, aber ich nutze Windows und nciht Solaris oder Linux...

http://java.sun.com/products/javacomm/

Also ich kenn mich mit Solaris zwar gar nciht, und mit Linux nur ein bisschen, aus, aber ich denke mal, dass ist nicht kompatibel zu Windows. Oder etwa doch? Kann mir mal einer sagen, was ich da runter laden muss?

Danke

Achja, muss ich mich dann da reggen oder gibts da auch ne anderen Downloadmöglichkeit.

Thx

Andun

PicNick
13.02.2006, 15:44
Wenn ich das richtig verstehe, passt das Zeugs schon für Windows.

http://www.fh-niederrhein.de/~gkorsch/javakurs/wn8/wn8.htm

Das Registrieren kost' nix, denk ich

SprinterSB
13.02.2006, 16:00
Die javax.comm gibt's AFAIK nur für Windows, zumindest die eigentliche Implementierung der nativen Methoden (irgendwo in 'ner dll). Oder hat sich da inzwischen was getan für Lunix etc.?

Ansonsten geht's so, wie man sich das vorstellt: EventListener etc und man kann selber an den einzelnen Pins wackeln :-)

Andun
13.02.2006, 16:33
Ok. Es scheint wohl doch zu gehen mit diesen Paketen, aber warum steht da nur was von wegen Linux und Solaris, wenn man auf Download klickt?

PicNick
13.02.2006, 17:58
Ich versteh den Text so: Das da ist die WIndows-Version (implizit),
aaaaber es gibt auch was für linux etc.

Andun
13.02.2006, 20:29
Also irgendwie kann ich das nicht so Recht glauben, da auch vor allem irgendwie die win32com.dll fehlt und ich sie nciht finden kann.

Außerdem will das doofe Ding das Package nicht finden, auch nach dem Einbinden nicht .... argg

Andun

Achja, und im Download Manager muss ich mich dann noch bei dieses Versionen hier unterscheiden, welche ich will:


Linux Platform - Java(tm) Communication API 3.0 Update 1
Java(tm) Communication API 3.0 - Linux, English

Solaris 8 & 9 -Sparc Platform - Java(tm) Communication API 3.0 Update 1
Java(tm) Communication API 3.0 - Solaris, English

Solaris x86 Platform - Java(tm) Communication API 3.0 Update 1
Java(tm) Communication API 3.0 - Solaris X86, English

Die gehen natürlich alle nicht, da in der entsprechenden Ordner die .dll fehlt, da sind dann linux oder solaris pakete drin.

Florian
13.02.2006, 20:45
Hallo Andun!
Wir machen auch gerade Java-Programmierung in IT und da kam mir auch die Idee die API javax.comm herunterzuladen und ich hatte das selbe Problem wie Du!
Ich habe mich auch extra bei Sun registriert und war danach ziemlich enttäuscht ...
die win32com.dll fehlt

ogni42
13.02.2006, 21:00
Ich würde Euch die Windows Version (mit dll) gerne uploaden aber mein Quota ist erreicht. HILFE ADMIN! Wie kann ich alte Sachen löschen, oder was gibt es sonst für Möglichkeiten?

Andun
13.02.2006, 21:12
Gut, wenigstens weiß ich jetzt nicht, dass ich einfach zu blöd dazu bin ... :D

Aber irgendwie ist das ziemlich schlecht von Sun ...

Und jetzt?

Florian
13.02.2006, 22:11
Hallo ogni42, Hallo Andun!

Gut, wenigstens weiß ich jetzt nicht, dass ich einfach zu blöd dazu bin ...Vielleicht sind wir ja beide zu blöde dafür!? *g*

Aber irgendwie ist das ziemlich schlecht von Sun ...Ja, das ist es in der Tat!
Mein IT-Lehrer konnte mir bisher auch noch nicht weiterhelfen ... :o(

Und jetzt?Und jetzt kommt ogni42 ins Spiel! ;o)

Ich würde Euch die Windows Version (mit dll) gerne uploadenDas wäre sehr nett, aber ich weiß nicht, ob man das so einfach öffentlich uploaden darf, immerhin wollte Sun ja, dass man sich vorher registriert! *lol*

aber mein Quota ist erreicht. HILFE ADMIN! Wie kann ich alte Sachen löschen, oder was gibt es sonst für Möglichkeiten?Probier mal über die Editierfunktion in alten Posts das Attachment zu löschen, müsste eigentlich so gehen!
Aber bist Du Dir sicher, dass Dein Speicher voll ist und nicht, dass einfach die Datei zu groß ist, das glaube ich nämlich eher!?

ogni42
14.02.2006, 08:15
Nee, der sagt mir, dass mein Quota erreicht ist. Die Datei ist klein genug. Einstweilen sucht doch nur mal nach der DLL.

Eine Alternative kann noch rxtx sein:
http://www.rxtx.org/
Da gibt's auch eine Version die ohne javax.comm funktioniert.

SprinterSB
14.02.2006, 09:11
Ich hab mal hochgeladen, was ich hab:

http://people.freenet.de/gjl/javacomm20-win32.zip

http://people.freenet.de/gjl/javacomm-howto-2.txt

ogni42
14.02.2006, 10:21
Mehr hätte ich jetzt auch nicht gehabt. :)

hacker
14.02.2006, 10:46
Vielen Dank dafür! War auch schon ne ganze Weile am suchen...:) Merci.

Gruss Hacker

SprinterSB
14.02.2006, 11:25
Wenn ich mich recht erinnere, muss man die Installation "von Hand" machen, also die .dll wo hinkopieren und ein .properties woanders hin, und...

Steht aber auch dort geschrieben.

Florian
14.02.2006, 13:16
Hallo Georg-Johann!
Danke für die Dateien!

Guckt mal, was ich in der Schule gefunden habe, vielleicht hätte mir der Gedankenblitz etwas eher kommen sollen, dann hätte ich schon längst programmieren können ... ;o)
Google-Suchworte: Java API javax.comm
API mit win32com.dll -> http://www.vorlesungen.uni-osnabrueck.de/informatik/robot00/ftp/javacomm.html
Anleitung für implementierung der dll -> http://www.fh-niederrhein.de/~gkorsch/javakurs/wn8/wn8.htm

Andun
14.02.2006, 16:17
Ahhhhh!!!!! Endlich mal jemand, der das Teil hat. DANKE!!!!!!!!

Die Seite mit der Anleitung hatte ich sogar auch schon gefunden. (Ist ja nicht schwer über google :D )

Andun

Florian
14.02.2006, 17:47
Ahhhhh!!!!! Endlich mal jemand, der das Teil hat. DANKE!!!!!!!!Ich bin auch glücklich, endlich eine Quelle dafür gefunden zu haben! :o)

Die Seite mit der Anleitung hatte ich sogar auch schon gefunden. (Ist ja nicht schwer über google)Ja, dachte nur, dass sie vielleicht für alle (die sie noch nicht kannten) interessant wäre ...

Hat den Code schonmal jemand ausprobiert?
Habe heute leider keine Zeit mehr den Code auszuprobieren, muss noch ein Politikreferat machen! :o(

Andun
14.02.2006, 19:39
Ich hab den Code noch nciht ausprobiert, da ich immer noch am kämpfen bin und BlueJ versuche klar zu machen, dass es das benutzen soll. Ich hab jetzt einfach mal die ganzen JDKs und JREs und so neuinstalliert ... DAs ist bei mir nämlich alles durcheinander.

Andun

Nachtrag:

Ich hab es jetzt endlich geschafft, die javax.comm zum Laufen zu bringen. Das Problem ist, dass ich 3(!) jre ordner auf der Platte hab. Irgendwie (trotz wegklicken des Hakens) hat das JDK eins installiert. So ne alte 1.4 ver oder so. Das frisch installiert JRE 1.5 ist das 2. und als sich dieses bei der Installation geupdatet hatte, hat es sich verdoppelt. Jetzt hab ich einfach in alle 3 Ordner jeweils die Datein getan und jetzt geht es ... Komisches Ding...

Jetzt kann mir BlueJ wenigstens das Beispiel von der Seite oben übersetzten. Allerdings bekommen ich nur einen NoSuchPortException als Fehler an den Kopf geworfen. Ich hab laut Anschlüßen und Gerätemanager einen COM1 (der hat auch bei dem Asuro schon mal gefunzt :D ). Deshalb hab ich natürlich in dem Programm COM1 als Parameter eingegeben, aber es geht trotzdem nciht ... ???

Rat? Naja, da werd noch mal ein wenig ausprobieren. Aber was ich noch wissen wollte, ist eigentlcih womit ihr Java programmiert? Also ich benutze im Moment BlueJ, da wir es in der Schule verwenden, da man damit uns Schülern sehr gut OOP beibringen kann. NetBeans wirkt auf mich irgendwie sehr kompliziert.
Eclipse soll ganz gut sein, hat uns ein Referand gesagt, aber als der Kurs das gemacht hat, war ich nciht da, deswegen kenn ich das nicht. Was benutzt ihr denn, oder könnt ihr empfehlen?

Andun

ogni42
15.02.2006, 08:02
Ich verwende die Sachen schon länger mit Erfolg für die serielle Schnittstelle. Die Programmierung ist ebenfalls sehr einfach, die Beispiele sind da recht hilfreich.

hacker
15.02.2006, 10:48
Ich verwende Eclipse und bin damit sehr zufrieden!! Hatte aber leider noch keine Zeit, die Classen auszuprobieren.

Florian
15.02.2006, 15:41
Ich benutze den Java-Editor von hier (http://www.bildung.hessen.de/abereich/inform/skii/material/java/editor.htm), allerdings vermute ich, dass es nicht das "beste" Tool ist! ;o)
Ich verwende es nur, weil wir es in der Schule nehmen ...

Ich programmiere überigens gerademal erst seit 2 Wochen Java! *g -> newbe*
In der Schule programmieren wir gerade ein Programm, dass uns "Das Haus vom Nikolaus" zeichnet! *stolz -> g*

Florian
15.02.2006, 19:07
Ein kleiner Rückschlag, es war ja fast schon zu befürchten, dass es nicht so reibungslos geht, wie ich mir das Ganze vorgestellt hatte! ;o)

Code von http://www.fh-niederrhein.de/~gkorsch/javakurs/wn8/wn8.htm:

import java.io.*;
import javax.comm.*;
import java.awt.*;
import java.awt.event.*;

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

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

public comframe()
{
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\n" , 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(2400 , SerialPort.DATABITS_8 , SerialPort.STOPBITS_1 , SerialPort.PARITY_NONE);
}
catch (UnsupportedCommOperationException e)
{}
}

public class sendeListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
PrintWriter aus = new PrintWriter(out);
aus.println(tfe.getText());
aus.flush();
aus.close();
}
}
public class commListener implements SerialPortEventListener
{
public void serialEvent(SerialPortEvent event)
{
if(event.getEventType() == SerialPortEvent.DATA_AVAILABLE)
{
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);
}
}
}
}
}

Fehler des Compilers:

comframe.java:23: warning: [deprecation] show() in java.awt.Windows has been deprecated
f.show();
^
1 warning

Woran könnte dieser Fehler liegen, kann mir wer helfen?

hacker
15.02.2006, 20:44
Wir müssen unser BMI Programm am Fr präsentieren...:) Das mit den Sounds klappt nun 1a :)

Florian
15.02.2006, 20:54
BMI ProgrammDas klingt nach einem Fettwegprogramm aus einer billigen Frauenzeitschrift ... *lol*
Was müsst ihr da machen?

ogni42
16.02.2006, 10:02
Lies bitte in der Java Dokumentation nach: Die Warning sagt nur, dass show() eine veraltete Methode ist.

Stattdessen sollte f.setVisible(true) genommen werden.

Florian
16.02.2006, 13:09
Hallo ogni42!
Danke für den Tipp, ich werde es gleich ausprobieren! ;o)

hacker
16.02.2006, 13:16
Das Programm errechnet dir dein Idealgewicht aufgrund der eingegebenen Werten. Dann zeigst dir halt noch so lustige Bilder an entsprechend für Übergewicht & Untergewicht...Zusätzlich hab ich noch paar gemeine Sprüche als Sound eingebunden. Jetzt mal gucken, wie das morgen wird ^^. Werd das Programm dann auch auf meine Webside hochladen.

Gruss Hacker

Florian
16.02.2006, 16:26
Hmmmm ... das Programm funktioniert irgendwie noch immer nicht ... wahrscheinlich habe ich irgendwo die API nicht vernünftig eingefügt ...

Hallo Hacker!
Ein sehr interessantes Programm, was ihr da macht ... ;o)=
Unser Programm ist um einiges langweiliger, aber wir haben ja auch erst vor kurzem angefangen! ;o)

Für alle, die es gerne ausprobieren möchten:

import javax.swing.*; // Java-Swing importieren
import java.awt.*; // Java-AWT importieren

// Programm für das Haus vom Nikolaus in
// 1. Blockaufbau und
// 2. im konventionellen Einzelstrichaufbau ...

public class Haus_vom_Nikolaus // Klasse für das Haus des Nikolaus
{
public static void main(String[] args) // Hauptmethode
{
// Attribute für beide Häuser definieren
int text_höhe = 10; // Höhe des Textes
int text_x_position = 15; // X-Position des Textes
int text_y_position = 15 + text_höhe; // Y-Position des Textes

int anfang_x_position = 150; // X-Position des Fensterzentrums
int anfang_y_position = 200; // Y-Position des Fensterzentrums

int haus_breite = 100; // Breite des Hauses
int haus_höhe = 100; // Höhe des Hauses
int dach_höhe = haus_höhe / 2; // Höhe des Daches

int x_position = 0; // X-Positions-Attribut auf 0 setzen
int y_position = 0; // Y-Positions-Attribut auf 0 setzen

// 1. Haus
JFrame haus1; // Objekt haus1 definieren
haus1 = new JFrame("Das Haus vom Nikolaus 1 ..."); // mit dem Titel

haus1.setSize(300 , 300); // Größe von haus1 definieren
haus1.setLocation(20 , 20); // Lage des Objekts definieren
haus1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E); // Schließen, wenn Button gedrückt
haus1.getContentPane().setBackground(Color.GREEN); // Hintergrundfarbe bearbeiten
haus1.setVisible(true); // Objekt aktivieren

warten(); // auf das 1. Haus warten
warten();
warten();
warten();
warten();

haus1.getContentPane().getGraphics().drawString("Haus vom Nikolaus 1" , text_x_position , text_y_position);

haus1.getContentPane().getGraphics().drawRect((anf ang_x_position - haus_breite / 2) , (anfang_y_position - haus_höhe / 2) , (haus_breite) , (haus_höhe));
warten();

haus1.getContentPane().getGraphics().drawLine((anf ang_x_position - haus_breite / 2) , (anfang_y_position - haus_höhe / 2) , (anfang_x_position) , (anfang_y_position - haus_höhe / 2 - (haus_höhe / 2)));
haus1.getContentPane().getGraphics().drawLine((anf ang_x_position + haus_breite / 2) , (anfang_y_position - haus_höhe / 2) , (anfang_x_position) , (anfang_y_position - haus_höhe / 2 - (haus_höhe / 2)));
warten();

haus1.getContentPane().getGraphics().drawLine((anf ang_x_position - haus_breite / 2) , (anfang_y_position - haus_höhe / 2) , (anfang_x_position + haus_breite / 2) , (anfang_y_position + haus_höhe / 2));
haus1.getContentPane().getGraphics().drawLine((anf ang_x_position + haus_breite / 2) , (anfang_y_position - haus_höhe / 2) , (anfang_x_position - haus_breite / 2) , (anfang_y_position + haus_höhe / 2));
warten();

// 2. Haus
JFrame haus2; // Objekt haus2 definieren
haus2 = new JFrame("Das Haus vom Nikolaus 2 ..."); // mit dem Titel

haus2.setSize(300 , 300); // Größe von haus2 definieren
haus2.setLocation(360 , 20); // Lage des Objekts definieren
haus2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E); // Schließen, wenn Button gedrückt
haus2.getContentPane().setBackground(Color.BLUE); // Hintergrundfarbe bearbeiten
haus2.setVisible(true); // Objekt aktivieren

warten(); // auf das 2. Haus warten
warten();
warten();
warten();
warten();

haus2.getContentPane().getGraphics().drawString("Haus vom Nikolaus 2" , text_x_position , text_y_position);

x_position = anfang_x_position + haus_breite / 2;
y_position = anfang_y_position + haus_höhe / 2;
haus2.getContentPane().getGraphics().drawLine(x_po sition , y_position , x_position - haus_breite , y_position - haus_höhe);
warten();

x_position = x_position - haus_breite;
y_position = y_position - haus_höhe;
haus2.getContentPane().getGraphics().drawLine(x_po sition , y_position , x_position + haus_breite , y_position);
warten();

x_position = x_position + haus_breite;
haus2.getContentPane().getGraphics().drawLine(x_po sition , y_position , x_position - haus_breite / 2 , y_position - (haus_höhe / 2));
warten();

x_position = x_position - haus_breite / 2;
y_position = y_position - haus_höhe;
haus2.getContentPane().getGraphics().drawLine(x_po sition , (y_position * 2) , x_position - haus_breite / 2 , y_position + haus_höhe );
warten();

x_position = x_position - haus_breite / 2;
y_position = y_position + haus_höhe;
haus2.getContentPane().getGraphics().drawLine(x_po sition , y_position , x_position , y_position + haus_höhe);
warten();

x_position = x_position;
y_position = y_position + haus_höhe;
haus2.getContentPane().getGraphics().drawLine(x_po sition , y_position , x_position + haus_breite , y_position);
warten();

x_position = x_position + haus_breite;
y_position = y_position;
haus2.getContentPane().getGraphics().drawLine(x_po sition , y_position , x_position , y_position - haus_höhe);
warten();

x_position = x_position;
y_position = y_position - haus_höhe;
haus2.getContentPane().getGraphics().drawLine(x_po sition , y_position , x_position - haus_breite , y_position + haus_höhe);
warten();
}

private static void warten() // 50.000.000 Takte warten
{
int warten_max = 50000000; // Wartezeit
int warten_zaehler = 0; // Zähler für die Warteschleife

while(warten_zaehler < warten_max)
{
warten_zaehler++;
}
}
}

Nicht gerade spannend, aber seht selbst! *g*

hacker
17.02.2006, 16:56
Hi Florian.

Hab es nun auf meiner Homepage...:

www.benjaminwild.roboterbastler.de/BMI.jar

Wenn du willst, kannst du dir das ja mal anschauen :)

Florian
17.02.2006, 19:33
Hallo hacker!
Darf ich Dich in meine Linkliste übernehmen, oder sogar in die Partnerseitenliste?

Der Compiler sagt zwar, dass der Code erfolgreich compiliert wurde, aber irgendwie:

java.lang.NoClassDefFoundError: BMI/Oberflaeche
Exception in thread "main"
Die Grafiken sind aber genial ... *lol*

luma
17.02.2006, 22:16
Hio.

Hmm, Java wird wohl immer beliebter was ;). Ich programmier damit schon seit mehr als 3 Jahren und verwende auch die Java-Comm API. Aber Achtung: Ich finde das nicht ohne, dass SprinterSB diese Pakete einfach so hochlädt. Das wiederspricht je jeglichem Recht, da man in diesem Fall ja keine Lizenz abnicken muss, sondern direkt dran kommt. Außerdem ist das mit der Java-Comm API eh so ne Sache. In einigen Foren wurde schon heftig darüber diskutiert wie man die Lizenz der API verstehen soll, weil die an einigen Stellen mehrdeutig ist. Also ich wäre auf jeden Fall vorsichtig.

Ich bin hier: http://savannah.gnu.org/projects/classpathx/ auf eine interessante Seite gestoßen. Ich dacht erst das ist die Lösung weil GPL aber irgendwie ist die API noch nicht vollständig fertig (in der Klasse SerialPort z.b. sind nur abstrakte Methoden drin). Entweder hab ich was übersehen, oder die Entwickler befinden sich noch in Entwicklung.

Gruß
Lutz

Florian
18.02.2006, 10:33
Hmm, Java wird wohl immer beliebter wasNaja, es wird halt viel in Schulen o.ä. gelehrt ...
Was mich an Java etwas nervt ist, dass man keine richtige .exe machen kann bzw. was ähnliches, was man ohne viel Aufwand ausführen kann!
Ich weiß zwar, dass man dann die Plattformunabhängigkeit aufgeben müsste, da man dann den Interpreter übergeht, aber es ist von der Anwendung her einfach einfacher! ;o)
Gibt es da Möglichkeiten?

linux_80
18.02.2006, 12:59
Hallo,
ich mach auch schon einige Jahre in Java rum, und mich stört das auch das man keine Applikation bauen kann, die weniger als 25MB Speicher braucht, wenn dann noch etwas mit Datenbank dazu kommt steigt der Speicherverbrauch nochmal um einiges an. Und solche sachen machen einen PC nicht schneller.

Ich hätte da zwar nix dagegen, das man die JAR-Dateien starten muss, denn diese kann man ja so compilieren und verlinken, das diese nach einem Doppelclick scheinbar automatisch gestartet werden,
aber das ist auch gleichzeitig das Problem das die ganze JRE pro Applikation soviel Speicher braucht.

Vor einiger Zeit hab ich testweise mal probiert das ganze in J# .Net umzusetzen, hiermit kann man nahezu genauso programmieren wie mit Java, es kommt auch eine .exe raus, auf dem Zielrechner muss man aber das .Net Paket installiert haben, damit die .exe läuft, also ähnlich wie bei Java.
Auch beim Speicherverbrauch hat sich nix verbessert gegenüber Javaausführung, nur scheint es das die .Net J# Programme etwas schneller laufen, wenn sie mal laufen.

In Sachen Java-exe hab ich bis jetzt nur sowas gesehen, das es zwar eine exe gibt, im Hintergrund aber doch eine ganze JRE liegt, die dann gestartet wird, also auch nicht das grüne vom Spinat 8-[

diesen Link hätte ich dazu gefunden:
http://www.galileocomputing.de/openbook/javainsel3/javainsel_250004.htm#Rxxjavainsel_250004256Konvert ierungvonJavaBytecodeineinWindowsExemitJET
da gibts auch irgendwo eine Testversion.

hacker
18.02.2006, 13:04
Hallo hacker!
Darf ich Dich in meine Linkliste übernehmen, oder sogar in die Partnerseitenliste?

Der Compiler sagt zwar, dass der Code erfolgreich compiliert wurde, aber irgendwie:

java.lang.NoClassDefFoundError: BMI/Oberflaeche
Exception in thread "main"
Die Grafiken sind aber genial ... *lol*

Hallo Florian,

na klar darfst du das...ich setz dich ebenfalls mal bei mir rein :)

Warum wolltest du denn den Code compilen? Einfach Doppelklick auf die Datei (BMI.jar) und es sollte laufen :)

Hab dafür ne 1 bekommen =) *freu*

Gruss Hacker

Florian
18.02.2006, 13:22
Hallo Hacker!
Ich setze Dich auch gleich in die Liste ... muss nur noch kurz die Langlöcher in der Alu-Platte zuende machen! ;o)
Dann erstmal herzlichen Glückwunsche zur 1! :o)
Ich finde in der Zip-Datei aber irgendwie keine BMI.jar, nur zwei Ordner, in denen jede Menge Bilder- und Sound-Files sind! ;o)
Tut mir Leid, dass ich eine so schwere Geburt bin, kenne mich mit Java noch nicht so glänzend aus ... *lol*

super_castle
18.02.2006, 14:26
Hmm, Java wird wohl immer beliebter was ......

träumst du..........java ist ein schulzwang an den schulen. freiwillig würde sich das keiner antun. musst dir mal vorstellen , die javacomm ist von 98...asbach...keine korrektur, keine verbesserung.
so ein programm kann man niemand anbieten.

hacker
18.02.2006, 14:31
*hehe* Nein, das ist keine *.zip Datei. Es ist zwar ein Archiv und lässt sich auch dementsprechend mit winzip o.ä Programm öffnen, aber die Datei ist die BMI.jar! Sie wird halt als Archiv erkannt und wird deshalb gleich standartmäßig mit deinem Packer verbunden (beim Start). Also auf die "angebliche" Datei Rechtsklick und dann öffnen mit. Da suchst du dir deine Java Runtime raus! Dann am besten noch Dateien mit dieser Programmendung immer mit diesem Programm öffnen und dann passt alles. Nun einfach Doppelklick auf die BMI.jar (dein angebliches Archiv) und alles müsst laufen.


Dann erstmal herzlichen Glückwunsche zur 1! :o)

Danke Danke..:)

Gruss Hacker

P.S.: Hab dich mal in ICQ geadded ..;)

luma
18.02.2006, 23:55
Hmm, Java wird wohl immer beliebter was ......

träumst du..........java ist ein schulzwang an den schulen. freiwillig würde sich das keiner antun. musst dir mal vorstellen , die javacomm ist von 98...asbach...keine korrektur, keine verbesserung.
so ein programm kann man niemand anbieten.

Hmm, ich will ja jetzt hier keinen "Was für eine Sprache muss man verwenden"-Glaubenskrieg anfangen, aber ich komm voll und ganz mit der java.comm API zurecht und überhaupt ist Java ein Segen. Ich lern grad nebenbei C damit ich meinen Roboter endlich auf vernüftigem Niveau (also in dem Stil wie ich Java programmiere) programmieren kann. Und jeder der erst Java lernt und dann diese kryptischen C Funktionen sieht weiß, dass Java ein einziger Segen ist (vorallem diese riesige Bibliothek aus Klassen!). Und komm mir jetzt nicht von wegen Java sei langsam...


Gruß
Lutz

ogni42
19.02.2006, 10:49
Also das Gejammera über die Javacomm kann ich auch nicht verstehen.

Die javacomm läuft seit Erscheinen fehlerfrei, was soll man da bitte noch dran ändern (manche scheinen sich so daran gewöhnt zu haben, dass jeden Monat ein update erscheint, dass sie den Grund dafür - schlechte Qualität der Vorgängerversion - schon vergessen haben)?

Die Javacomm implementiert genau die Interfaces, die man für byte- und stream-orientierte Verarbeitung mit Java benötigt, unterstützt den parallelen und seriellen Port (und damit auch USB-RS232 Wandler). Ich habe bisher noch kein Problem damit feststellen können. Wann immer damit etwas nicht funktioniert hat, lag's im Endeffekt an mir selbst. Hinzu kommt, das die Javadocs und Beispiele ebenfalls sehr gut sind.

Und nach 7 Jahren mit MFC, Deplhi und Co kann ich luma nur zustimmen, dass Java ein Segen ist. Auf dem Server sowieso und auf dem Host realisiere ich eine komplexe GUI damit wesentlich schneller als mit den anderen Sprachen. Kann aber natürlich daran liegen, dass ich nicht so ein Programmiergott bin wie andere :-k

Florian
19.02.2006, 11:56
Also bisher bin ich froh, dass ich durch die Schule gezwungen bin Java zu lernen, es bringt mir wirklich viel! :o)
Auch, wenn bei mir die Javax.comm noch nicht richtig funktionert (irgendwie erkennt die Software die Dateien nicht).
Ich muss mich damit aber irgendwann nochmal mehr beschäftigen! ;o)

Wenn ich so an meine kläglichen Versuche, C++ zu programmieren, zurückdenke, da bin ich froh, dass ich Java habe!
Nungut, da war ich auch 13 Jahre alt, aber trotzdem ... ;o)

super_castle
19.02.2006, 16:28
Und komm mir jetzt nicht von wegen Java sei langsam...


für die zeitkritischen routinen....he...he...schnarrch...he....für das arbeiten mit der gameboycam am avr zu langsam in der pixelübertragung.

super_castle
19.02.2006, 16:30
.....Aber Achtung: Ich finde das nicht ohne, dass SprinterSB diese Pakete einfach so hochlädt. Das wiederspricht je jeglichem Recht, da man in diesem Fall ja keine Lizenz abnicken muss,....

du bist ein spinner....he.....

ogni42
19.02.2006, 17:55
Ähm, was soll da langsam sein? Zeitkritische Routinen? super_castle, ich weiss nicht wie Du die Pixel überträgst, bei mir zumindest ist der AVR der bottleneck, da der MAX232 nur 115kbd kann. Und mein PC ist mittlerweile 5Jahre alt, also nicht der Schnellste.

Die Javacomm kapselt per JNI nur ein paar Aufrufe an eine C-lib (die wincomm32.dll nach der hier so viele gefragt haben) - wie RXTX eben auch. Da ist nichts langsamer als bei VB oder C oder Delphi. Was an Mehraufwand entsteht ist ein Funktionsaufruf. Der Rest ist vom JIT eh schon in Maschinencode übersetzt.

castle, poste doch mal Deinen Code, vielleicht können wir Dir bei Deinem Perfomanceproblem ja weiter helfen.

Sternthaler
19.02.2006, 20:19
Ich bleibe bei C, da es zu meinem Alter passt.
Falls super_castle tatsächlich Code posten sollte, müssen wir hier wahrscheinlich mit Lochkarten rechnen.

super_castle
19.02.2006, 20:49
aus einem bild 128x128pixel im picturefenster muss ein bestimmter grauton herausgesucht werden von dem gameboycambild für den robbyweg der gegangen werden soll ohne ein hindernisse anzusteuern und diese suche der pixel ist in java zu langsam. weiterhin muss mit videocapture das übertragene funkcambild(farbe) noch dargestellt werden im javafenster (18bilder pro sekunde), die kommunikation über rs232 zur steuerung des robby vom pc aus (steuerelemente müssen im javafenster sein) muss auch noch aufrechterhalten werden. weiterhin werden mir die daten von der cmucam2 auf dem robby über funk an die serielle schnittstelle mitgeteilt und als auswertebalken iim fenster dargestellt

hatte ich ganz vergessen, über den pda und purebasic habe ich auch noch eine verbindung zum robby. am pda ist ein avr8 mit einem funkmodul der die daten zum usbfunkmodul(rs232) des pc sendet.

das alles kann ich zur zeit nur mit purebasic machen und es funktioniert reibungslos.

vielleicht könnt ihr mir hier unter die arme greifen mit java wenn es geht.

he... he... mit lochkarten geht das nicht...he...he..
zur zeit laufen alle meine sensoren (funk/bild/ton/ir/ultra/compassmodul, insgesamt 16 sensoren) in winavr-c auf dem robby.

ein teil der programme :




gameboycam :

IncludeFile "game-pebi-inc.pb"

#BufferIn = 1024*16
#BufferOut = 1024*16

Global HCom.l
Global Chaine.s
Declare bild()

Procedure pebi()
los.s = "los"+Chr(13)
ComSendByte(HCom,@los,Len(los))
Buffer.b = 0

StartDrawing( WindowOutput() )
Delay(200)

For y=20 To 127+20
For x=200 To 127+200
ComReadByte(HCom,@Buffer,1)
Plot(x,y,RGB(buffer,buffer,buffer))
Next x
Next y

StopDrawing()
EndProcedure

Chaine="COM1:19200,N,8,1"

Open_Window_0()

Repeat ; Start of the event loop

Event = WaitWindowEvent() ; This line waits until an event is received from Windows

WindowID = EventWindowID() ; The Window where the event is generated, can be used in the gadget procedures

GadgetID = EventGadgetID() ; Is it a gadget event?

EventType = EventType() ; The event type

;You can place code here, and use the result as parameters for the procedures

If Event = #PB_EventGadget

If GadgetID = #Button_0
If HCom <> 0
MessageRequester("Message","Comport ist offen !",#MB_ICONEXCLAMATION)
Else
HCom = ComOpen(Chaine,0 ,#BufferIn,#BufferOut)
EndIf

ElseIf GadgetID = #Button_1
If HCom <> 0
If ComClose(HCom)
HCom = 0
EndIf
EndIf

ElseIf GadgetID = #Button_2
If HCom <> 0
pebi()
Else
MessageRequester("Message","Comport nicht geöffnet !",#MB_ICONEXCLAMATION)
EndIf

EndIf

EndIf

Until Event = #PB_Event_CloseWindow ; End of the event loop

If HCom <> 0
If ComClose(HCom)
HCom = 0
EndIf
EndIf

CloseWindow(0)

End
;


videocapture:

IncludeFile "inc.pb"

#WM_CAP_START = #WM_USER
#WM_CAP_SET_CALLBACK_ERROR = #WM_CAP_START + 2
#WM_CAP_SET_CALLBACK_STATUS = #WM_CAP_START + 3
#WM_CAP_SET_CALLBACK_YIELD = #WM_CAP_START + 4
#WM_CAP_SET_CALLBACK_FRAME = #WM_CAP_START + 5
#WM_CAP_SET_CALLBACK_VIDEOSTREAM = #WM_CAP_START + 6
#WM_CAP_SET_CALLBACK_WAVESTREAM = #WM_CAP_START + 7
#WM_CAP_DRIVER_CONNECT = #WM_CAP_START + 10
#WM_CAP_DRIVER_DISCONNECT = #WM_CAP_START + 11
#WM_CAP_DRIVER_GET_CAPS = #WM_CAP_START + 14
#WM_CAP_DLG_VIDEOFORMAT = #WM_CAP_START + 41
#WM_CAP_DLG_VIDEOSOURCE = #WM_CAP_START + 42
#WM_CAP_DLG_VIDEODISPLAY = #WM_CAP_START + 43
#WM_CAP_SET_PREVIEW = #WM_CAP_START + 50
#WM_CAP_SET_PREVIEWRATE = #WM_CAP_START + 52
#WM_CAP_GET_STATUS = #WM_CAP_START + 54
#WM_CAP_FILE_SAVEDIB = #WM_CAP_START + 25
#WM_CAP_SET_SCALE = #WM_CAP_START + 53
#WM_CAP_SET_CALLBACK_CAPCONTROL = #WM_CAP_START + 85
#WM_CAP_EDIT_COPY = #WM_CAP_START + 30
#WM_CAP_GRAB_FRAME = #WM_CAP_START+60

Open_Window_0()
OpenLibrary(0, "AVICAP32.DLL")

hRobby = CallFunction(0, "capCreateCaptureWindowA", "Test", #WS_VISIBLE + #WS_CHILD, 120, 30, 300, 300, hWnd, 0)
SendMessage_(hRobby, #WM_CAP_DRIVER_CONNECT, 0 , 0)
SendMessage_(hRobby, #WM_CAP_SET_SCALE , 1 , 0)
SendMessage_(hRobby, #WM_CAP_SET_PREVIEWRATE, 50, 0)
SendMessage_(hRobby, #WM_CAP_SET_PREVIEW, 1 , 0)

Repeat ; Start of the event loop

Event = WaitWindowEvent() ; This line waits until an event is received from Windows

WindowID = EventWindowID() ; The Window where the event is generated, can be used in the gadget procedures

GadgetID = EventGadgetID() ; Is it a gadget event?

EventType = EventType() ; The event type

;You can place code here, and use the result as parameters for the procedures

If Event = #PB_EventGadget

If GadgetID = #Button_0
If Link <> 0
StartDrawing( WindowOutput() )
DrawImage(Link, 440,30,300, 300)
StopDrawing()
EndIf
EndIf

EndIf

SendMessage_(hRobby, #WM_CAP_GRAB_FRAME, 0 , 0)
SendMessage_(hRobby, #WM_CAP_EDIT_COPY, 0 , 0)
Link = GetClipboardData(#PB_ClipboardImage)

Delay(1)

Until Event = #PB_Event_CloseWindow ; End of the event loop

SendMessage_(hRobby, #WM_CAP_SET_PREVIEW, 0, 0)
SendMessage_(hRobby, #WM_CAP_DRIVER_DISCONNECT, "Test", 0)
CloseWindow(0)
CloseLibrary(0)

End
;


cmucamdaten:

; PureBasic Visual Designer v3.92 build 1460

IncludeFile "cmu-pebi-inc.pb"

#BufferIn = 1024*32
#BufferOut = 1024*32

Global HCom.l
Global Chaine.s
Global Buffer.b
Global Buffer1.b
Global Buffer2.b
Global x.w
Global y.w
Global zaehler.l
Global durch.w

Dim cmudaten.b(40000)


Procedure pebi()

ComOpen(Chaine,0 ,#BufferIn,#BufferOut)

los.s = "sf"+Chr(13)
ComSendByte(HCom,@los,Len(los))

Delay(500)

zaehler=-1
Repeat
zaehler=zaehler+1
ComReadByte(HCom,@Buffer,1)
cmudaten(zaehler)=Buffer
Until Buffer=3

StartDrawing( WindowOutput() )
durch=0
zaehler=3
x=120
y=10
Repeat
durch=durch+1
For z=0 To 86
zaehler=zaehler+1
Buffer=cmudaten(zaehler)
zaehler=zaehler+1
Buffer1=cmudaten(zaehler)
zaehler=zaehler+1
Buffer2=cmudaten(zaehler)
Plot(x,y,RGB(Buffer,Buffer1,Buffer2))
x=x+1
Plot(x,y,RGB(Buffer,Buffer1,Buffer2))
x=x+1
Next z
zaehler=zaehler+1
x=120
y=y+1
Until durch= 144
ComClose(HCom)
StopDrawing()
EndProcedure

Chaine="COM1:19200,N,8,1"

Open_Window_0()

Repeat ; Start of the event loop

Event = WaitWindowEvent() ; This line waits until an event is received from Windows

WindowID = EventWindowID() ; The Window where the event is generated, can be used in the gadget procedures

GadgetID = EventGadgetID() ; Is it a gadget event?

EventType = EventType() ; The event type

;You can place code here, and use the result as parameters for the procedures

If Event = #PB_EventGadget

If GadgetID = #Button_0
If HCom <> 0
MessageRequester("Message","Comport ist offen !",#MB_ICONEXCLAMATION)
Else
HCom = ComOpen(Chaine,0 ,#BufferIn,#BufferOut)
EndIf

ElseIf GadgetID = #Button_1
If HCom <> 0
If ComClose(HCom)
HCom = 0
EndIf
EndIf

ElseIf GadgetID = #Button_2
If HCom <> 0
pebi()
Else
MessageRequester("Message","Comport nicht geöffnet !",#MB_ICONEXCLAMATION)
EndIf

EndIf

EndIf

Until Event = #PB_Event_CloseWindow ; End of the event loop

If HCom <> 0
If ComClose(HCom)
HCom = 0
EndIf
EndIf

CloseWindow(0)

End
;


robbysteuerung über rs232 :

; PureBasic Visual Designer v3.92 build 1460

IncludeFile "robo-inc.pb"

#BufferIn = 1024
#BufferOut = 1024

Global HCom.l
Global Chaine.s

Chaine="COM1:19200,N,8,1"

Open_Window_0()

HCom = ComOpen(Chaine,0 ,#BufferIn,#BufferOut)

Repeat ; Start of the event loop

Event = WaitWindowEvent() ; This line waits until an event is received from Windows

WindowID = EventWindowID() ; The Window where the event is generated, can be used in the gadget procedures

GadgetID = EventGadgetID() ; Is it a gadget event?

EventType = EventType() ; The event type

; ButtonGadget(#Button_0, 170, 150, 60, 20, "rea")
; ButtonGadget(#Button_2, 40, 120, 60, 20, "lii")
; ButtonGadget(#Button_4, 40, 150, 60, 20, "lia")
; ButtonGadget(#Button_6, 150, 50, 60, 20, "reo")
; ButtonGadget(#Button_7, 80, 50, 60, 20, "lio")
; ButtonGadget(#Button_8, 170, 120, 60, 20, "rei")
; ButtonGadget(#Button_9, 150, 80, 60, 20, "reu")
; ButtonGadget(#Button_11, 80, 80, 60, 20, "liu")

If Event = #PB_EventGadget

If GadgetID = #Button_0
los.s ="130"+Chr(13)
ComSendByte(HCom,@los,Len(los))

ElseIf GadgetID = #Button_2
los.s = "141"+Chr(13)
ComSendByte(HCom,@los,Len(los))

ElseIf GadgetID = #Button_4
los.s = "138"+Chr(13)
ComSendByte(HCom,@los,Len(los))

ElseIf GadgetID = #Button_6
los.s = "129"+Chr(13)
ComSendByte(HCom,@los,Len(los))

ElseIf GadgetID = #Button_7
los.s = "137"+Chr(13)
ComSendByte(HCom,@los,Len(los))

ElseIf GadgetID = #Button_8
los.s = "133"+Chr(13)
ComSendByte(HCom,@los,Len(los))

ElseIf GadgetID = #Button_9
los.s = "132"+Chr(13)
ComSendByte(HCom,@los,Len(los))

ElseIf GadgetID = #Button_11
los.s = "140"+Chr(13)
ComSendByte(HCom,@los,Len(los))

EndIf

EndIf

Until Event = #PB_Event_CloseWindow ; End of the event loop

If HCom <> 0
If ComClose(HCom)
HCom = 0
EndIf
EndIf

End
;

ogni42
20.02.2006, 08:55
pebi^H^H^H^Hsuper_castle, ich weiss nicht, wo Du immer Deine Behauptungen her nimmst. Zeig doch bitte mal den java-code, der zu langsam sein soll! Den nehme ich mir dann her und messe mal wie schnell das geht (Am besten noch eine entsprechende Purebasic.exe dabei zum vergleichen).

Vielleicht hast Du ja bei java die Nutzung von DirectDraw ausgeschaltet?

super_castle
20.02.2006, 11:09
setzt mir die videocapturedatei oben so um, das ich aus der ablage ein fotoschnappschuss von videocapture mit einem button-druck in ein picturefenster setze, welches neben der laufenden vidocapturedarstellung (18bilder/sec) dargestellt wird und ich dann auswerten kann. wenn du das kannst, dann nehme ich dich ernst und wir können auf einem level reden.

ich warte.

ps: in purebasic harmoniert alles, so wie ich es möchte. mein ziel ist erreicht.
wenn du mich mit java überzeugen kannst (die aufgabe oben), hast du ein pluspunkt.

und wenn du mir ganz auf die schnelle sagen kannst, wie ich mit der javacomm die seriellen pins : RTS, DTR, CTS, DSR abfragen bzw ansprechen kann, hast du mir auch schon geholfen. diese pins brauche ich zum kommunizieren.

ogni42
20.02.2006, 11:56
Unten stehendes direkt kopiert aus der Dokumentation zur javacomm. Die Software dazu musst Du Dir schon selbst schreiben :) (werde aber mal ein paar benchmarks zur java2D Geschwindigkeit machen) Ernst nehmen musst Du mich deswegen natürlich nicht. Schneller gings auch nicht, war essen.

o isCD()
Gets the state of the CD (Carrier Detect) bit in the UART.
o isCTS()
Gets the state of the CTS (Clear To Send) bit in the UART.
o isDSR()
Gets the state of the DSR (Data Set Ready) bit in the UART.
o isDTR()
Gets the state of the DTR (Data Terminal Ready) bit in the UART.
o isRI()
Gets the state of the RI (Ring Indicator) bit in the UART.
o isRTS()
notifyOnCTS(boolean)
Expresses interest in receiving notification when the CTS (Clear To Send) bit changes.
o notifyOnDataAvailable(boolean)
Expresses interest in receiving notification when input data is available.
o notifyOnDSR(boolean)
Expresses interest in receiving notification when the DSR (Data Set Ready) bit changes.
o notifyOnFramingError(boolean)
Expresses interest in receiving notification when there is a framing error.
o notifyOnOutputEmpty(boolean)
Expresses interest in receiving notification when the output buffer is empty.
o notifyOnOverrunError(boolean)
Expresses interest in receiving notification when there is an overrun error.
o notifyOnParityError(boolean)
Expresses interest in receiving notification when there is a parity error.
o notifyOnRingIndicator(boolean)
Expresses interest in receiving notification when the RI (Ring Indicator) bit changes.
sendBreak(int)
Sends a break of millis milliseconds duration.
o setDTR(boolean)
Sets or clears the DTR (Data Terminal Ready) bit in the UART.
o setFlowControlMode(int)
Sets the flow control mode.
o setRcvFifoTrigger(int)
Set the Receive Fifo trigger level If the uart has a FIFO and if it can have programmable trigger levels, then this method will cause the uart to raise an interrupt after trigger bytes have been received. Deprecated.
o setRTS(boolean)
Sets or clears the RTS (Request To Send) bit in the UART.
o setSerialPortParams(int, int, int, int)
Sets serial port parameters.

ogni42
20.02.2006, 17:21
Also kleiner Benchmark mit der Darstellung bei mir:

128x128 Pixel von der GBCam, mit Faktor 2 in x- und y- Richtung skalieren.

Damit ich vernünftige Messwerte bekomme habe ich das Bild 100 mal zeichnen lassen. Ergebnis: 3.8ms/Bild, macht 263 Bilder/sek, auf einem Centrino 1.2GHz Laptop mit Mobility Radeon 9000. Auf dem alten Athlon muss ich den Benchmark erst noch machen, kommt dann als edit...

Also mir reicht das eigentlich an Geschwindigkeit und wenn mich meine mathematischen Kenntnisse nicht verlassen haben ist 263>18=true!

Hier ist noch der Auszug aus dem Code mit dem ich den Benchmark gemacht habe:


public static final int rows = 128;
public static final int columns = 128;
public static final float stretch = 2.0;
public int[][] image = new int[rows][columns];

protected void paintComponent( Graphics g )
{
Graphics2D g2 = (Graphics2D) g;
g.setColor( new Color( 0, 0, 0) );
g.fillRect(0, 0, getWidth(), getHeight()); // just to delete old stuff

g2.scale(stretch, stretch); //attach scaling transform to renderer
long start = System.currentTimeMillis();
// draw the image 100 times in order to get useful values for timing
for (int i = 0; i<100; i++)
{
for (int y = 0; y < _rows; y++)
{
for (int x = 0; x < _columns; x++)
{
// get the RGB value from the image array (where the data
// from the serial port has been written to.
img.setRGB(y, x, image[y][x]);
}
}
// render the image using only predefined affine transforms
// (no additional tranform or filtering required
g2.drawImage(img, null, 0, 0);
}
double used = System.currentTimeMillis() - start;
System.out.println("used " + used + " ms");
}


Um es also mal zusammen zu fassen:
1. Aussage: "javacomm geht nicht, macht fehler, ..." Das haben wir ja mittlerweile widerlegt
2. Aussage: "java ist zu langsam in der Bilddarstellung und schafft keine 18 fps - Nun ja für 128x128 Pixel die noch dazu in x und y Richtung skaliert werden, stimmt das schon mal nicht.

Vielleicht bekomme ich ja jetzt einen pluspunkt. Ich bebe vor freudiger Erwartung :)

BTW, Atmel bringt mit dem AVR32 einen Kern, der direkt Java Bytecode ausführen kann.

Sternthaler
20.02.2006, 18:40
@ogini42
Von mir bekommst du auf alle Fälle einen Riesen-Pluspunkt.
So eine 'mal eben so' geschrieben Testfunktion hätte ich mit Pur-C nicht von 12:09 bis 18:21 hinbekommen. Ich muss jetzt für mich überlegen, ob ich mir Java nicht doch noch 'reinziehe'. (Obwohl ich ein bisschen enttäuscht bin, dass nur 263 fps möglich sind. Lach , lach, lach)

ogni42
20.02.2006, 19:09
OK, Benchmark auf meiner alten Heimkiste (Athlon XP1600, GF4400, DDR133-Speicher): 6.3ms/Bild (158 fps). Nicht ganz so gut, aber das war auch nicht zu erwarten.

EDIT: Bei 256x256@24bpp sind es 22ms/Bild = 45fps, also immer noch recht flott, wobei man sehen kann, dass das nahezu linear skaliert. Auf dem Laptop sind es 14,2ms/Bild = 70fps.


@Sternthaler: Danke für die Blumen :cheesy: Wenn man Erfahrung in Objektorientierter Programmierung hat, ist das Swing GUI Framework leicht zu erlernen, mal abgesehen davon, dass Eclipse&Co. bei der Fehlersuch äußerst hilfreich sind. (Es hat übrigens nicht so lange gedauert. Ich hab's nach der Arbeit in ca. 1.5Stunden gemacht, wobei der Rahmencode schon stand und ich den nur den Java2D Code + Zeitmessung eingebaut habe.)

Als GUI Builder finde ich den netbeans sehr schön (ist ebenfalls kostenlos).

Ich setze das für die Kommunikation mit meiner AVR-Plattform ein. Hatte bisher nicht die Java2D Imaging API verwendet, das habe ich heute mit Hilfe der Online Doku gemacht.

Fazit: Selbst für mich als durchschnittlichen Programmierer ist das superschnell zu erlernen und die Geschwindigkeit ist auch nicht zu verachten.

super_castle
20.02.2006, 19:49
java ist zu langsam in der Bilddarstellung und schafft keine 18 fps...

das ist nicht das gameboycambild sondern ein ersatzbild für den wintv2000-bildschirm der neben den gameboybild dargestellt wird. aus diesen video vom robby (über funk) grabbe ich ein bild raus und stelle es als standbild(picturebox) zur auswertung bereit. ich bearbeite bzw stelle drei bilder dar: videobild-life vom robby, standbild zum auswerten vom video und ein bild von der gameboycam. und das macht mir zeitliche schwierigkeiten.

ps: jetzt habe ich noch dazu ein drehbaren meshkörper vom robby welches sich in die richtung dreht nach den daten die vom compassmodul auf dem robby zum pc gefunkt werden.

ogni42
20.02.2006, 20:39
Dann solltest Du vielleicht von purebasic nach java wechseln :)

Irgendwo habe ich noch eine 3D Physik Demo in Java3D rumfliegen, die schafft auch über 200 fps.

Ohne Dir zu nahe treten zu wollen, aber wenn Du das mit Java2D/3D nicht hinbekommst, ist entweder der Rechner sehr, sehr langsam (<PII Klasse) oder an dem Code irgendwas nicht in Ordnung. Anders kann ich mir das nicht erklären. Poste doch mal den java Code der Dir Probleme macht. Da findest sich sicher eine Lösung.

EDIT: Auf einem schnelleren Rechner als einem Laptop bekommt man sicher auch mehr als 263fps.

super_castle
21.02.2006, 14:23
habe zur zeit "netlogo" in der mache, läuft unter java.
vielleicht kannst du da mal die javacomm intregieren, es ist nämlich keine schnittstelle rs232 dort untergebracht.

castle

ogni42
21.02.2006, 14:54
Nachdem was ich durch googlen gefunden habe: Wenn ich die Seite (auf die Schnelle) richtig verstehe ist das ein Logo-Interpreter, um damit Multi-Agenten-Simulationen aufzubauen. Was soll denn da über RS232 geschickt werden?

Nach fünf Minuten quer lesen scheint das über den extension Mechanismus von netlogo zu gehen. Da kann man dann jar-Files einbinden und die extension in der Simulation aufrufen.

super_castle
21.02.2006, 17:53
ich wollte über die rs232 daten vom robby dort rüberschicken und eine Multi-Agenten-Simulationen durchführen , auch daten von netlogo wieder nach draussen senden zum robby.

ogni42
21.02.2006, 18:02
Ich werfe mal einen Blick rein, wie aufwändig das ist. Kann aber nächste Woche werden weil das thematisch ziemlich weit ab von dem liegt, was ich gerade mache... also bitte etwas Geduld. [-o<

super_castle
21.02.2006, 21:00
unter "manual webversion" findest du eine beschreibung über ein sogenanntes gogo-board mit einem pic. mit diesem board werden über die javacomm daten ausgetauscht unter netlogo. diese daten könnte man auch mit einem avr austauschen. bloss wie wird das eingebunden, diese schnittstelle, damit es mit den gogo-befehlsatz läuft oder eine eigene konstruktion bauen.

ogni42
23.02.2006, 17:42
Ok. Das hat also schon mal jemand gemacht. Das vereinfacht die Sache. Gibt es davon irgendwo die java source. Ich finde die nicht...

castle, falls Du die auftreiben kannst, würde ich da rein schauen und beschreiben was, wo, wie zu ändern ist.

ExtreamCoder
20.03.2006, 18:48
Meiner Meinung nach ist Eclipse eh am besten.
Schade finde ich nur, dass der keinen Gui-Builder integriert hat

ogni42
20.03.2006, 18:51
Stimmt. Es gibt wohl GUI Builder als Plugin. Ich verwende aber meist den von netbeans.

hacker
21.03.2006, 16:44
Es gibt den Visual Editor als Plugin. Auch runterzuladen auf der Seite des Herstellers. Bin sehr zufrieden damit.

Gruss Hacker