Java serijska komunikacija

poruka: 10
|
čitano: 2.973
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
12 godina
neaktivan
offline
Java serijska komunikacija

Pozdrav svima,

imam neku Java aplikaciju koja se pokrece kao servis pomocu wrapper-a. Za serijsku komunikaciju sa nekim uređajom je potrebno prvo neke datoteke kopirati u JRE da bi aplikacija mogla citati i pisati na serijski port. Kad ja kopiram te datoteke to normalno radi, ali ja bih htio da te datoteke budu unutar nekog foldera koji je unutar instalacijskog foldera, tako da se nemoram bojat da ce netko pregazit te datoteke, jer ce se program vrtiti na serveru. Kako bi ja mogao to rijesiti? 3 su datoteke, comm.jar, win32com.dll i javax.comm.properties.

Savjeti?

Moj PC  
0 0 hvala 0
12 godina
neaktivan
offline
Re: Java serijska komunikacija

Amo redon

 

"prvo neke datoteke kopirati u JRE"

 

1) Nekako iman dojam da totalno neznas sta si napisa, al amo pretpostavit da si zapravo mislia na folder di je JRE, ako korisnik to izbrise ionako ti cila aplikacija nece radit pa ja osobno "nevidim problem" osim cinjenice da je to totalno neprofesionalno.

 

2) Vjerovatno radis nesto totalno kirvo kad uopce imas potrebu stavljat svoje filove u JRE folder

 

3) Sobzirom da neznan kako si ti uopce dosa do toga da moras filove stavljat u JRE folder, onda jednostavno kompajliraj sve u jedan jar file, i nemas nikakvih problema sa tin

12 godina
neaktivan
offline
Re: Java serijska komunikacija

Ovako, malo sam to brzo napisao pa sam izostavio neke stvari. Za serijsku komunikaciju koristim Communications API od Sun-a, comm.jar. Neznam da li si kad radio sa time, ali po internetu na vecini stranica koje opisuju taj API, imas i chapter za instalaciju. I doslovno pise uzmite taj file i kopirajte ga u taj folder, uzmite taj file i kopirajte ga u drugi folder; unutar JRE-a. Taj API nije standardno unutar JRE-a pa ga treba dodati.
E, ja to nebi rucno kopirao, nego nekako rekao JVM-u gdje se nalaze te datoteke. :)

 

Edit: evo i primjer http://edn.embarcadero.com/article/31915

Poruka je uređivana zadnji put sri 20.2.2013 14:58 (vasso123).
12 godina
neaktivan
offline
Re: Java serijska komunikacija

Ja san mislia da se radi o nekom totalno livom jar-u, u ovom slucaju kopiraj u jre folder nema razloga zasto to nenapravit

 

Sta se tice kopiranja, nemas nista rucno kopirat to odradi tokom instalacije, i kad se program prvi put pokrene sve je tamo di treba bit

12 godina
neaktivan
offline
Java serijska komunikacija

Eh, nije to moja zamisao, nego zamisao moga sefa. Dakle njegova ideja je da JVM hvata te 3 datoteke iz instalacijskog foldera nase aplikacije, a ne da se kopira u jrm folder, i sad da ja slozim to nekako. Pa me zanima da li bi se ikako moglo to rijesit? Kao sto sam vec rekao, aplikacija se pokrece kao servis pomocu wrappera, taj wrapper ima konfiguracijsku datoteku u kojoj se mogu navesti parametri pri pokretanju aplikacije(kao kad se rucno pokrece aplikacija, pa se stavi java -D<nešto>). U toj konf.datoteci sam probao staviti java.library.path=../lib/win32com.dll(valjda se tako zove,neznam sad,pisem od doma) i za java.class.path=../lib/comm.jar i java.class.path=.../lib/javax.comm.properties. Međutim, ne prolazi.

Ja se ispricavam ako sam mozda bubno neku glupost ili nesto, naime ja sam svjezi elektrotehnicar sa faxa koji je prije 3 mjeseca krenuo u informaticke vode, tako da se dosta gubim.

Svaki savjet je dobrodosao,hvala :)

 

Moj PC  
0 0 hvala 0
12 godina
neaktivan
offline
Re: Java serijska komunikacija

Reci sefu da je idiot (totalno san ozbiljan)

 

Ako neko pobrise JRE folder program ti ionako nece radit prema tome totalno je nevazno jesi ti doda jos koji file unutra.

 

A ako vec moras onda jednostavno u svoju aplikaciju uvali cili JRE (zajedno sa ova 3 file-a) i onda postavi ovo java.class.path na to di taj TVOJ JRE sa ova 3 file, i trebalo bi radit jer si napravia istu stavar ka da si uvalia ta 3 file-a u JRE samo sta se sad JRE nalazi di se nalazi tvoja plaikacija a ne di se on normlano nalazi.

 

Note: Sad nzn sta taj config file radi, ako je java.class.path prilikom instalacije postavi java path na OS-u na to sta si ti definira onda super nemas nikakvih problema ako ne onda ces vjerovatno morat i taj dio popravljat

15 godina
neaktivan
offline
Re: Java serijska komunikacija
vasso123 kaže...

Eh, nije to moja zamisao, nego zamisao moga sefa. Dakle njegova ideja je da JVM hvata te 3 datoteke iz instalacijskog foldera nase aplikacije, a ne da se kopira u jrm folder, i sad da ja slozim to nekako. Pa me zanima da li bi se ikako moglo to rijesit?

Provjeri podržava li java application launcher određivanje dodatnih foldera za biblioteke putem komandne linije, koliko ja vidim iz ovoga, podržava, a i mnogo više:

 

Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)
where options include:
    -d32          use a 32-bit data model if available
    -d64          use a 64-bit data model if available
    -client       to select the "client" VM
    -server       to select the "server" VM
    -hotspot      is a synonym for the "client" VM  [deprecated]
                  The default VM is client.

    -cp <class search path of directories and zip/jar files>
    -classpath <class search path of directories and zip/jar files>
                  A ; separated list of directories, JAR archives,
                  and ZIP archives to search for class files.
    -D<name>=<value>
                  set a system property
    -verbose:[class|gc|jni]
                  enable verbose output
    -version      print product version and exit
    -version:<value>
                  require the specified version to run
    -showversion  print product version and continue
    -jre-restrict-search | -no-jre-restrict-search
                  include/exclude user private JREs in the version search
    -? -help      print this help message
    -X            print help on non-standard options
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  enable assertions with specified granularity
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  disable assertions with specified granularity
    -esa | -enablesystemassertions
                  enable system assertions
    -dsa | -disablesystemassertions
                  disable system assertions
    -agentlib:<libname>[=<options>]
                  load native agent library <libname>, e.g. -agentlib:hprof
                  see also, -agentlib:jdwp=help and -agentlib:hprof=help
    -agentpath:<pathname>[=<options>]
                  load native agent library by full pathname
    -javaagent:<jarpath>[=<options>]
                  load Java programming language agent, see java.lang.instrument

    -splash:<imagepath>
                  show splash screen with specified image
See http://www.oracle.com/technetwork/java/javase/documentation/index.html for m
ore details.

 

Nekako sumnjam da je baš nužno sve kopirati u JRE folder. Možeš čak i propertiese proslijeđivati putem komandne linije, tako da ti vjerojatno ni ona .propertiess datoteka nije potrebna budući da se ionako sastoji od jednog jedinog key-value para. Ostaje samo pitanje dinamičke biblioteke koju ovaj API koristi za komunikaciju sa uređajima. Ali bih i nju za početak pokušao strpati u folder gdje je i comm.jar pa vidjeti dalje što se događa...

 

Da povučem analogiju: isti takvi savjeti se dijele i za klasične kompajlere (kopirajte biblioteku X i headere Y u \lib i \include foldere kompajlera) jer je najjednostavnije i uglavnom idiot-proof, iako to uopće nije jedini način na koji se te biblioteke mogu instalirati i koristiti.

 

 

vasso123 kaže...

Kao sto sam vec rekao, aplikacija se pokrece kao servis pomocu wrappera, taj wrapper ima konfiguracijsku datoteku u kojoj se mogu navesti parametri pri pokretanju aplikacije(kao kad se rucno pokrece aplikacija, pa se stavi java -D<nešto>). U toj konf.datoteci sam probao staviti java.library.path=../lib/win32com.dll(valjda se tako zove,neznam sad,pisem od doma) i za java.class.path=../lib/comm.jar i java.class.path=.../lib/javax.comm.properties. Međutim, ne prolazi.

Relativne putanje? Jesi li siguran koji je trenutni radni direktorij na koje bi se ova relativna putanja odnosila? Ja bih probao sa punom putanjom...

0xBADC0DE
Poruka je uređivana zadnji put čet 21.2.2013 5:48 (rustweaver).
12 godina
neaktivan
offline
Java serijska komunikacija

Oke, znaci moglo bi se to nekako proslijediti pri startanju. Treba mu pokazat gdje se nalaze te datoteke, ali pitanje je kako? Sta da probam?

Edit. zao mi je sto sam naporan,ali jbg kad se gubim. Pokusavam svasta ali ne uspijeva

Edit2. ne odgovara mi nikako stavljati JRE unutar aplikacije. Sto se tice onih relativnih putanja,to sam stavio samo kao primjer.

Poruka je uređivana zadnji put čet 21.2.2013 9:31 (vasso123).
Moj PC  
0 0 hvala 0
12 godina
neaktivan
offline
Re: Java serijska komunikacija

Sam sebi kompliciras zivot :/

 

Evo jos jedno alternativno rjesenje koristi nrjavaserial, to je fork od rxtx, koji ima isti api ka i communcation api samo sta radi i na 64 bitnin verzijama.

 

Sobzirom da nisan nikad koristia communcation api proba san kompajlirat ovaj  kod koji san nasa na google i sve prolazi bez problema

 

Obrati pozornost na to da ima nekoliko aktivnih issues pa vidi jel se odnose i na tvoj kod

 

 

15 godina
neaktivan
offline
Re: Java serijska komunikacija
vasso123 kaže...

Oke, znaci moglo bi se to nekako proslijediti pri startanju. Treba mu pokazat gdje se nalaze te datoteke, ali pitanje je kako? Sta da probam?

Edit. zao mi je sto sam naporan,ali jbg kad se gubim. Pokusavam svasta ali ne uspijeva

A -classpath switch?

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html
http://docs.oracle.com/javase/6/docs/technotes/tools/windows/classpath.html
http://en.wikipedia.org/wiki/Classpath

java -DDriver=com.sun.comm.Win32Driver -cp "c:\aplikacija\comm.jar;c:\aplikacija\aplikacija.jar" mainclass

 

Tako možeš nanizati koliko god hoćeš jar datoteka. A možeš koristiti i manifest kako bi to automatski odredio. Btw "aplikacija.jar" je .jar koji sadrži "mainclass" klasu koja sadrži sadrži main metodu, odnosno entry point tvoje aplikacije, ta ćeš imena morati mijenjati jer sam ih stavio samo za primjer. Pomoću switcha -D se postavi system property, pa ti vjerojatno javax.comm.properties datoteka nije potrebna, iako nisam siguran.

 

win32com.dll se vjerojatno treba nalaziti u istom folderu sa comm.jar datotekom.

 

Što misliš kako minecraft funkcionira? On ima ovakvu strukturu:

.\minecraft.exe

.\minecraft.jar

.\bin\jinput.jar

.\bin\lwjgl.jar

.\bin\lwjgl_util.jar

.\bin\minecraft.jar

.\bin\natives\jinput-dx8.dll

.\bin\natives\jinput-dx8_64.dll

.\bin\natives\jinput-raw.dll

.\bin\natives\jinput-raw_64.dll

.\bin\natives\lwjgl.dll

.\bin\natives\lwjgl64.dll

.\bin\natives\openal32.dll

.\bin\natives\openal64.dll

 

Kako bi to tek izgledalo da se sve te biblioteke natrpaju u JRE folder? Kvaka je u launcheru "minecraft.exe", koji proslijedi odgovarajuće parametre JVM-u. Taj je launcher btw. izrađen pomoću install4j

 

Pih, to malo što sam googlao, nisam imao pojma da postoji toliko frke oko classpath postavki :D

 

I da, ovo što je TBFUJY napisao. Java communications API je prastari set biblioteka (vidim datume iz 1998), a budući da se oslanja na dinamičku biblioteku jednake starosti pitanje je kako će se ponašati na modernim 64 bitnim verzijama windowsa. Možda bi bilo dobro da potražiš alternative za serijsku i paralalnu komunikaciju.

0xBADC0DE
Poruka je uređivana zadnji put čet 21.2.2013 18:50 (rustweaver).
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice