- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
Új hozzászólás Aktív témák
-
mobal
nagyúr
-
floatr
veterán
-
floatr
veterán
Sziasztok!
Van egy régi Javas appunk, ami kb. 3 éve változatlanul fut MINDEN NAP, majd egyik nap ezt a hibát kaptuk:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1úgy, hogy senki hozzá se nyúlt, egy jar van odarakva forrás nélkül. Azóta nem is indul el, mindig ezt írja. Ötlet, hogy mi váltatta ki ezt a hibát?
Szerintem valami ilyesmi lehet a probléma:
if (new Date().after(getSupportEndDate())) {
throw new ArrayIndexOutOfBoundsException();
}
-
mobal
nagyúr
Sziasztok!
Van egy régi Javas appunk, ami kb. 3 éve változatlanul fut MINDEN NAP, majd egyik nap ezt a hibát kaptuk:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1úgy, hogy senki hozzá se nyúlt, egy jar van odarakva forrás nélkül. Azóta nem is indul el, mindig ezt írja. Ötlet, hogy mi váltatta ki ezt a hibát?
Ez így kevés információ, de van egy tömb aminek olyan elemére hivatkozol ami nincs, nem létezik.
-
floatr
veterán
Sziasztok!
10 éve dolgozom System Admin/DevOps szerepkörben több nemzetközi cégnél. Viszont mostanában az infrastruktúra területéről kacsingatok a fejlesztés felé, leginkább a java érdekel. Nem vagyok benne totál kezdő, MSc-s diplomám van, ahol volt jó pár programozói kurzusom is, amiket könnyedén vettem. Volt köztük több Java-s is. A szakdolgozatomnál például egy monitorozó rendszert készítettem, aminek a felülete Springes volt. Viszont azóta eltelt már pár év. Szerintetek mennyi idő alatt lehet annyira átképezni magam, hogy már való életbeli projekteken dolgozhassak? A cégnél van képzés, heti 3x 1,5 óra, amit igénybe vehetek. Szerintetek reális lehet az egy év erre?
Nálunk kb félévig heti 3-4x4 óra a frissen végzősök/utolsó évesek számára kitalált képzés. Az innen kikerülő jó képességű fejlesztő kb 9-12 hónap alatt tud beilleszkedni egy projektbe. Ez megválaszolja a kérdésedet?

-
sztanozs
veterán
Sziasztok!
10 éve dolgozom System Admin/DevOps szerepkörben több nemzetközi cégnél. Viszont mostanában az infrastruktúra területéről kacsingatok a fejlesztés felé, leginkább a java érdekel. Nem vagyok benne totál kezdő, MSc-s diplomám van, ahol volt jó pár programozói kurzusom is, amiket könnyedén vettem. Volt köztük több Java-s is. A szakdolgozatomnál például egy monitorozó rendszert készítettem, aminek a felülete Springes volt. Viszont azóta eltelt már pár év. Szerintetek mennyi idő alatt lehet annyira átképezni magam, hogy már való életbeli projekteken dolgozhassak? A cégnél van képzés, heti 3x 1,5 óra, amit igénybe vehetek. Szerintetek reális lehet az egy év erre?
Biztos, hogy fejleszeteni akarsz, nem érdekel más (pl it security?)

-
bucsupeti
senior tag
Sziasztok!
10 éve dolgozom System Admin/DevOps szerepkörben több nemzetközi cégnél. Viszont mostanában az infrastruktúra területéről kacsingatok a fejlesztés felé, leginkább a java érdekel. Nem vagyok benne totál kezdő, MSc-s diplomám van, ahol volt jó pár programozói kurzusom is, amiket könnyedén vettem. Volt köztük több Java-s is. A szakdolgozatomnál például egy monitorozó rendszert készítettem, aminek a felülete Springes volt. Viszont azóta eltelt már pár év. Szerintetek mennyi idő alatt lehet annyira átképezni magam, hogy már való életbeli projekteken dolgozhassak? A cégnél van képzés, heti 3x 1,5 óra, amit igénybe vehetek. Szerintetek reális lehet az egy év erre?
ha csináltál már springes alkalmazást és azzal tisztába is voltál, akkor szerintem tudsz "mindent".
Ha csak a gyakorlat hiánya ami miatt aggódsz akkor ahhoz nem kell egy év szvsz. -
Lortech
addikt
A hibák nagy részét kijavítottam, három maradt amivel nem tudok mit kezdeni:
SajatPanel.java:379: error: cannot find symbol
/* 305 */ Logger.getLogger(SajatFrame.class.getName()).log(Level.SEVERE, null, ex);
^
symbol: class SajatFrame
location: class SajatPanel
SajatPanel.java:386: error: cannot find symbol
/* 312 */ SajatDialog mdialog = new SajatDialog(null, true);
^
symbol: class SajatDialog
location: class SajatPanel
MentesPanel.java:386: error: cannot find symbol
/* 312 */ SajatDialog mdialog = new SajatDialog(null, true);
^
symbol: class SajatDialog
location: class SajatPanel
3 errorsA SajatFrame és a SajatDialog külön classok.
Nyilván minden függőséget oda kell tenni mellé, hogy forduljon. Kiexportálod a teljes jar forrását, behúzod IDE alá egy projekt forrásaként. Ekkor a jaron belüli függőségekkel megvagy, ha egyéb libtől is függ a lefordítandó osztály, akkor azt is build pathhoz adod. A cannot find symbol hibák hiányzó típusokat jelentenek, ha nem tudod, hol a hiányzó függőség, rá kell keresni az alkalmazás/konténer egyéb csomagjaiban (jar,war,ear), ha vannak.
-
n00n
őstag
A hibák nagy részét kijavítottam, három maradt amivel nem tudok mit kezdeni:
SajatPanel.java:379: error: cannot find symbol
/* 305 */ Logger.getLogger(SajatFrame.class.getName()).log(Level.SEVERE, null, ex);
^
symbol: class SajatFrame
location: class SajatPanel
SajatPanel.java:386: error: cannot find symbol
/* 312 */ SajatDialog mdialog = new SajatDialog(null, true);
^
symbol: class SajatDialog
location: class SajatPanel
MentesPanel.java:386: error: cannot find symbol
/* 312 */ SajatDialog mdialog = new SajatDialog(null, true);
^
symbol: class SajatDialog
location: class SajatPanel
3 errorsA SajatFrame és a SajatDialog külön classok.
-
mobal
nagyúr
Akkor még utána kell húznod a jelenlegi verzióhoz és jó lesz.
-
Lortech
addikt
Sziasztok!
Van egy ezer éves jar file-om, amihez sajnos már nincs meg a forrás. Át kellene írnom egyetlen metódusban két értéket, van erre valami módszer?
if ((this.egyes.exists()) || (this.kettes.exists()))
{
if (this.egyes.exists()) {
this.egyes = "EGYES";
}
if (this.kettes.exists()) {
this.kettes = "KETTES";
}
}
}na már most még csak a változók neveit sem akarom átírni, csak az értékük legyen HÁRMAS vagy NÉGYES. Megoldható ez?
Persze, jadolod (pl. jd-gui), módosítod, és újrafordítod, a classt kicseréled a jar-ban.
(Feltéve, hogy a licence megengedi.
)
Közben figyelj, hogy a class verzió (major/minor) egyezzen, azaz lehetőleg ugyanazzal a jdk-val fordítsd, amivel eredetileg fordítva lett. Ebben a MANIFEST.MF segíthet, ha rendesen ki van töltve, de javap-vel érdemes leellenőrizni. -
gergo5991
őstag
-
floatr
veterán
Én egy kisebb ügyviteli cucc alá legutóbb egy félig-meddig beágyazott derby-t pakoltam. Azért nem igazi beágyazott, mert a spring context végül egy db szervert indít, és ahhoz lehet IP-n keresztül egy sql klienssel csatlakozni
-
boost
veterán
attól függ mekkora az appod, lehet, hogy javadb is elég lenne, ha nem üzleti a cucc, csak tanulás céljából.. Persze egy MySQL már bo"ven elég.
-
Cathfaern
nagyúr
Ha logikailag egy alkalmazás (pl. nyilvános oldal + annak admin felülete), akkor nem sok értelme van. Ha valami cross-site login dolgot akarsz (pl. van egy már elterjedt oldalad, sok felhasználóval, és akarsz csinálni egy teljesen mást, de közös bejelentkezést akarsz), esetleg akkor lehet értelme a különvételnek.
-
floatr
veterán
Van egy Webapp1 nevű servlet, ezen vannak statikus html oldalak, illetve egy login form. Ha jó a felhasználónév, jelszó, akkor egy teljesen új felület jelenne meg. Ezt úgy tudom új projektbe illik megírni.Ezt is kiexportálom .war-ba. Akkor hogy tudok az egyik warból a másikra hivatkozni? Remélem érthető.

Hát, sok dolgot láttam már, de a bejelentkezés után másik war-ba ugrást én egy kicsit feleslegesnek érzek. Még a liferay is meg tud különböztetni nyilvános, és zárt szekciót, pedig az egy vicces állat...
-
Cathfaern
nagyúr
Van egy Webapp1 nevű servlet, ezen vannak statikus html oldalak, illetve egy login form. Ha jó a felhasználónév, jelszó, akkor egy teljesen új felület jelenne meg. Ezt úgy tudom új projektbe illik megírni.Ezt is kiexportálom .war-ba. Akkor hogy tudok az egyik warból a másikra hivatkozni? Remélem érthető.

Ha mindenképp külön akarod venni, akkor miért nem csak egy linket laksz az első oldalra, ami átdob a másikra ahol a login form várja a usert? Sokkal tisztább

-
floatr
veterán
Sziasztok
Elkezdtem ismerkedni csak úgy hobbiból a Springgel. Össze is raktam egy Spring MVC webappot. Kiexportáltam .WAR fájlba felraktam egy szerverre (Tomcat 7) és nagyon szépen megy. Viszont azt, hogy tudom megoldani, hogy ebből a webappból "indítok" egy másikat? Hogy tudok ráhivatkozni? Próbálok rákeresni angolul, de nem sok sikerrel...

Hogy érted azt, hogy indítasz egy másikat?

-
boost
veterán
Sziasztok
Elkezdtem ismerkedni csak úgy hobbiból a Springgel. Össze is raktam egy Spring MVC webappot. Kiexportáltam .WAR fájlba felraktam egy szerverre (Tomcat 7) és nagyon szépen megy. Viszont azt, hogy tudom megoldani, hogy ebből a webappból "indítok" egy másikat? Hogy tudok ráhivatkozni? Próbálok rákeresni angolul, de nem sok sikerrel...

Tudtommal a zártság elve miatt az egyik app nem tud a másikról, szóval csak előre definiált url-el hivatkozhatsz rá.
-
emvy
félisten
Aha. Hat, multkor installaltam Windowst, aztan beirtam, hogy
C:\>cinst notepadplusplus 7zip java.jdk putty skype paint.net windirstat winscp greenshot git totalcommander conemu SourceTree foobar2000 kdiff3 Firefox poweriso IrfanView lighttable
... ittam egy teat, es mire vegeztem, ez mind fentvolt, magatol. A mysql, tomcat es tarsai ugyanigy felugranak, konzolbol. IntelliJ-t nyilvan nem tudsz repobol telepiteni te sem.
Szoval ezek a dolgok nagyreszt hozza nem ertesbol fakadnak es/vagy urban legendek. Lehet mindenen fejleszteni az esetek nagyreszeben. Van, ahol tenyleg jobb a Linux (peldaul Node.js-hez), van, ahol meg a Windows (nyilvanvaloan .Netes dolgokhoz).
-
raggg
senior tag
-
emvy
félisten
Cégnél a Windowsos (7) fejlesztőinknek 2-3x tovább tart összevadászni és telepíteni a fejlesztőkörnyezetüket, mint aki Linuxon (Ubuntu 14.04) fejleszt. Windowson sokszor hegeszteni kell, ami Linuxon out of box megy. Nem mondom, hogy nem lehet, hogy máshol fordított a helyzet. Nálunk ezt tapasztaltam.

Milyen kornyezetet? Kivancsi vagyok -- en mindketton fejlesztek, es mindketton kb. ugyanannyira egyszeru.
-
TheProb
veterán
-
raggg
senior tag
-
raggg
senior tag
Sziasztok!
Találtam tök érdekes szakdolgozatokat a következő linken: https://dea.lib.unideb.hu
De csak egyetemi IP-ről lehet őket letölteni? Valaki tudna ebben segíteni nekem? Jár/járt oda, stb?
Régen nem így nézett ki ez az oldal, akkor le lehetett tölteni a pdf-eket. Én beírtam a keresőbe most hogy java és simán betöltötte pdf-ben a szakdolgozatot.
A kódokat nem mindig volt kötelező feltenni így egy-két szakdolgozatnál ez sajnos hiányzik.
-
boost
veterán
És az mennyire biztonságos? Azt ha jól tudom elvileg bárki elérheti, nem?
szerk.: Jó, hülye vagyok. A jelszót nem tárolom benne.

Más: Úgy oldottam meg, hogy van egy JFrame-em ezen egy JPanel amin van a bejelentkezés. Ha az adatbázisban benne van a felhasználó és a titkosított jelszó, akkor a JFrame lecseréli a JPanelt arra amit a bejelentkezett felhasználók látnak. Ez így nagyon fapados, mennyire biztonságos?
Szerintem a te szinteden elég biztonságos. Azért remélem nem valós, üzleti programot készítesz.

-
bucsupeti
senior tag
Csináld meg először karakteres programként. Ha az működik utána csinálj hozzá gui-t. Szerintem sokkal jobban meg fogod érteni és el tudod szeparálni az alkalmazás egyes rétegeit és ha a gui-s részhez érsz, már egyértelmű lesz az is hogy hol is tárolódik az alkalmazás valamilyen adata...
Magyarul először az üzleti logikát dolgozd ki...
-
boost
veterán
-
bucsupeti
senior tag
Köszi mindenkinek a tanácsot. Úgy döntöttem, hogy elkezdek olvasgatni a módszerekről amiket írtatok, de megírom először "egyszerű" Java-ban Swinggel a kinézett feladatot. Már neki is álltam.
Az első kérdésem, ugye van több ablakom ezeken keresztül kellene vinni a bejelentkezett felhasználó adatait (neve, felhasználóneve, stb). Ennek hogyan érdemes neki állni?desktop alkalmazásnál ez miért probléma? bejelentkezéskor eltárolod egy objektumban az adatokat... Nyilván ennek az objektumot minden modulból elérhetőnek kell lenni.
Lehet hogy nem értem igazán hogy mit szeretnél.Vagy összekattintgattad a képernyőket és a login képernyőről a sikeres bejelentkezés után az infókat akarod továbbvinni?
-
emvy
félisten
Szerintem akkor felejtsd el ezt a framework-rengeteget, amik lentebb elhangzottak. Elso korben csinald meg konzolosra, legyen mondjuk egy MySQL + (valami ORM) + sima Java SE.
-
bucsupeti
senior tag
Sziasztok!
Szeretnék csak gyakorlás céljából készíteni egy kisebb Java alkalmazást. Ez így nézne ki:
Lenne egy weboldal (bárki által elérhető), ide ellátogatnának a userek és látnának eseményeket (koncert, színház, stb). Itt tudnának jegyet foglalni az eseményre, tehát megjelenne nekik egy panel ahol kiválasztják grafikusan az ülőhelyeket (a már foglaltak piros színűek, a szabadok zöldek) és elküldik a foglalást.
Ez nyilván egy adatbázisban tárolódna. Én a MySQL-re gondoltam.
A másik oldalon pedig ülne egy adminisztrátor, aki webes felületen látná a foglalásokat grafikusan, meg ilyenek.
A kérdésem, hogy ti milyen technológiákat választanátok ehhez? Kezdő vagyok Java-ból, szeretnék fejlődni és úgy gondolom egy ilyen nagy, gyakorlati projekt sokat segítene. Ezért kérem, hogy érhetően írjátok le, hogy mit használnátok és én utána olvasok a dolgoknak.
Köszönöm.Ez a példa amit felvázoltál Java EE tanulásra tényleg megfelelő. De ha most kezded a JAVA-t akkor lehet hogy inkább valamilyen lokális alkalmazást JAVAsolnék.
Az EE-t én is nem régen kezdtem és hatalmas a téma, rengeteg framework kínálja magát, az adatbázisokról és a perzisztenciakezelőkről nem is beszélve.A példád alapján én a következőt javaslom:
Csináld meg a felvázolt példát karakteres JAVA programként. Lehessen lekérdezni a szabad helyeket, amit egyenlőre kilistázna. Akár lehet bonyolítani hogy bekéri hogy a nézőtér melyik sorára kíváncsi a felhasználó, ezt beírva kiírná hogy az adott sorban milyen sorszámú székek szabadok.
Jó kis tanuló algoritmus lehet hogy megadja a felhasználó hogy hány helyet szeretne és kilistázza hogy hol tud ennyi széket egymás mellett foglalni stb...Ezt először csináld meg adatbázis nélkül a memóriában tárolva konténerekkel. Utána csináld meg JDBC-vel adatbázisban, majd valamilyen perzisztenciakezelővel.
Meg fogod tapasztalni hogy milyen jó dolog egy ORM rendszer.
Ezek után belekóstólhatsz a gui programozásba, lokális desktop alkalmazást csinálva swing komponensekkel.Ezek után jöhet a felvázolt weboldal, de ez nagyobb falat lesz az biztos. A JavaEE megismerése nem kis feladat. Meg kell ismerni az architekturát, a servlet konténereket, az alkalmazásszervereket. Utána jöhet az EJB programozás és valamilyen framework amivel kényelmesen tudod összerakni a ui-t.
A példa szerintem jó, meg lehet rajta keresztül sokmindent tanulni. Sok sikert és kitartást!
-
Jim-Y
veterán
Sziasztok!
Szeretnék csak gyakorlás céljából készíteni egy kisebb Java alkalmazást. Ez így nézne ki:
Lenne egy weboldal (bárki által elérhető), ide ellátogatnának a userek és látnának eseményeket (koncert, színház, stb). Itt tudnának jegyet foglalni az eseményre, tehát megjelenne nekik egy panel ahol kiválasztják grafikusan az ülőhelyeket (a már foglaltak piros színűek, a szabadok zöldek) és elküldik a foglalást.
Ez nyilván egy adatbázisban tárolódna. Én a MySQL-re gondoltam.
A másik oldalon pedig ülne egy adminisztrátor, aki webes felületen látná a foglalásokat grafikusan, meg ilyenek.
A kérdésem, hogy ti milyen technológiákat választanátok ehhez? Kezdő vagyok Java-ból, szeretnék fejlődni és úgy gondolom egy ilyen nagy, gyakorlati projekt sokat segítene. Ezért kérem, hogy érhetően írjátok le, hogy mit használnátok és én utána olvasok a dolgoknak.
Köszönöm.Mivel ilyet más úgyse fog írni:
- JAX-RS + MySQL
- AngularJS -
Senhi
aktív tag
Sziasztok!
Szeretnék csak gyakorlás céljából készíteni egy kisebb Java alkalmazást. Ez így nézne ki:
Lenne egy weboldal (bárki által elérhető), ide ellátogatnának a userek és látnának eseményeket (koncert, színház, stb). Itt tudnának jegyet foglalni az eseményre, tehát megjelenne nekik egy panel ahol kiválasztják grafikusan az ülőhelyeket (a már foglaltak piros színűek, a szabadok zöldek) és elküldik a foglalást.
Ez nyilván egy adatbázisban tárolódna. Én a MySQL-re gondoltam.
A másik oldalon pedig ülne egy adminisztrátor, aki webes felületen látná a foglalásokat grafikusan, meg ilyenek.
A kérdésem, hogy ti milyen technológiákat választanátok ehhez? Kezdő vagyok Java-ból, szeretnék fejlődni és úgy gondolom egy ilyen nagy, gyakorlati projekt sokat segítene. Ezért kérem, hogy érhetően írjátok le, hogy mit használnátok és én utána olvasok a dolgoknak.
Köszönöm.Tiszta JavaEE-vel:
Db-nek jó szerintem a Mysql.
Szervernek a legegyszerűbb a TomEE, esetleg GlassFish.
Adatréteg JPA, hozzá providernek EclipseLink
Üzleti-logika: EJB-k
Megjelenítés: JSF + ehhez kiegészítésként PrimeFaces amivel több komponensed lesz. Mondjuk JSF helyett millió egy másik technológia van, majd többiek mondanak mást. -
axioma
veterán
Egyirányú a dolog.
Van egy ilyen Hashmapem:
Map sajatMap = new HashMap();
sajatMap.put("Alma", "Apple");
sajatMap.put("Répa", "Carrot");
sajatMap.put("Labda", "Ball");Ebből, hogy tudok véletlenszerűen kivenni egy kulcsot. Azt kiíratni a képernyőre, majd mellé a hozzátartozó értéket? (A második vele gondolom a .get(key) metódussal megy, inkább az első fele érdekel)
SZERK.: MEGOLDVA. Előbb kérdeztem, mint olvastam volna

Hat lassan jobban jarnal ket egyutt karbantartott arraylist-tel... veletlenszam maximuma es a szo kiragadasa szam alapjan egyszerubb, ha nem torolsz soha akkor oly tok mindegy, hozzafuzni egyutt kell, ennyi. Nem tudom, hogy a hatterben mivel dolgozik a hashmap, de ha van benne valami onszervezo fa, akkor azt is el tudnam kepzelni, hogy a sorszamok veletlenszerusege ellenere a kulonbozo atalakitos trukkokkel igy kapott szavak nem lesznek eleg veletlenszeruek.
A szo eleji nagybetut majd illene ignoralni ellenorzeskor... -
emvy
félisten
Egyirányú a dolog.
Van egy ilyen Hashmapem:
Map sajatMap = new HashMap();
sajatMap.put("Alma", "Apple");
sajatMap.put("Répa", "Carrot");
sajatMap.put("Labda", "Ball");Ebből, hogy tudok véletlenszerűen kivenni egy kulcsot. Azt kiíratni a képernyőre, majd mellé a hozzátartozó értéket? (A második vele gondolom a .get(key) metódussal megy, inkább az első fele érdekel)
SZERK.: MEGOLDVA. Előbb kérdeztem, mint olvastam volna

Random r = new Random();
Map.Entry[] e= myHashMap.entrySet().toArray();
randEntry = e[r.nextInt(e.length)].getValue(); -
WonderCSabo
félisten
200 elemnél még egy sima array és lineáris keresés is elég... Ekkora elemszám már gyakorlatilag nulla a mai processzorteljesítményekhez, ha más adatszerkezetbe szervezed nem fogsz gyorsulást tapasztalni. 1 millió elemnél már igen.
Egyébként a legkényelmesebb erre a célra valamilyen kétirányú map, pl. Guava Bimap. Vagy ha egyirányú a tanulás akkor elég egy HashMap is.
-
floatr
veterán
-
axioma
veterán
Ugyan nem offline, es plane nem is programozas, de magara az eredeti a celra - ha a feltetelek nem akadalyok - ajanlom a meglevo quizlet.com-ot. Tobb gyakorlasi mod, kulonbozo szohalmazok definialasa, stb.
-
floatr
veterán
Nemtom mi a probléma egy beágyazott DB-vel. Sokkal praktikusabb, még ha összerakni az alapokat kicsit több idő is.
-
xTc
aktív tag
Mondjuk egy json? A program indulásnál berántod a memóriába, azután azt csinálsz vele amit akarsz. Esetleg hsqdb, vagy derby.
-
Aethelstone
addikt
-
Aethelstone
addikt
Ez egy impozáns eredmény
Azt viszont mindenképpen érdemes megnézni(gondolom, hogy ezt meg is tettétek), hogy tutira átvigyen mindent, ami változik 
-
n00n
őstag
Még nem volt időm éles adatokon kipróbálni. De elvileg pár óra múlva lehetőségem lesz rá, akkor beszámolok róla mennyit jelent az új módszer. De szerintem drasztikusan csökkenni fog az ideje. Jelenleg így néz ki a dolog:
146 227 fájl, 15 400 mappában.
Tehát kb. 10 fájl van egy mappában. Magyarán, ha egy egész mappát ki lehet hagyni, mert semmi nem módosult benne, akkor nem kell 10 fájlt ellenőrizni. Naponta el kell ezt játszani. És naponta olyan 200 mappában történik durván változás (nincs benne rendszer, hogy melyikben). Tehát ~15 200 mappába bele se kell lépni és ~ 150 000 fájl-t nem kell ellenőrizni, hogy létezik-e.
A régi módszerrel körülbelül 7 perc volt még végig ért minden fájlon. Itt szerintem bőven 5 perc alá fog szorulni a dolog. Ami most nem tűnik olyan soknak, de ha egyszer lehet, akkor miért ne.

Bocsi. Elsőre annyira megdöbbentett az eredmény, hogy pár napig még próbálgattuk, teszteltük, hogy mindent átvisz-e. De igen, frankón működik és kevesebb, mint két perc alatt végez, szemben a régivel, ami 7 percig szöszmötölt.
-
Aethelstone
addikt
Egyébként ha a directory nem jegyzi, hogy mikor történt módosítás, nyugodtan végigmehetsz a fájlokon. Nem ez az ellenőrzés a szűk keresztmetszet ennyi fájl másolása esetén.
-
Karma
félisten
-
Karma
félisten
Sziasztok!
Van egy Java függvényem, aminek annyi a lényege, hogy megadunk egy forrás-, és egy célmappát. Majd végigmegy egyesével rekurzívan és átmásolja a még nem nem átmásolt fájlokat:
//másolás függvény:
public void masolasFGV(File src, File dest)
throws IOException {
//Meg vizsgáljuk, hogy mappa-e:
if (src.isDirectory()) {
//Megpróbáljuk létrehozni a mappát (ha van, akkor nem csinál semmit)
dest.mkdir();
//Listába rendezzük a mappa tartalmát:
String files[] = src.list();
//Majd egyesével végigmegyünk rajta:
for (String file : files) {
//Elkészítjük a fájlokat:
srcFile = new File(src, file);
destFile = new File(dest, file);
//Rekurzív másolás:
masolasFGV(srcFile, destFile);
}
} else {
// Ha a cél nem létezik, másolunk:
if (!dest.exists()) {
Files.copy(src.toPath(), dest.toPath());
System.out.println("Másolás: " + src);
} else {
System.out.println("Van már: " + src);
}
}
}Ez szép is meg jó is. Viszont szeretnék rajta egy kicsit módosítani. Tök sok olyan van, hogy egy mappában van még egy csomó mappa, meg fájl és ezek már meg vannak és felesleges újra "megvizsgálni" őket. Ezért egyszerűbb lenne: Megadjuk a forrásmappát és a célmappát. Ellenőrzi az utolsó módosítás dátumát (.lastModified()), ha nagyobb (azaz újabb), mint az utolsó mentés dátuma akkor belemegy és végig megy rajta ugyanúgy, mint a fenti példában. Viszont ellenkező esetben az egészet kihagyja. Valakinek ötlet?
Ezt a kiegészítő ötletedet szerintem ne erőltesd annyira, mert bár tényleg jó ötlet, nem üzembiztos. Nem minden fájlrendszer jegyzi fel a tartalmazó mappákon a módosítási időt, amikor alatta egy fájl változik.
-
Aethelstone
addikt
Sziasztok!
Van egy Java függvényem, aminek annyi a lényege, hogy megadunk egy forrás-, és egy célmappát. Majd végigmegy egyesével rekurzívan és átmásolja a még nem nem átmásolt fájlokat:
//másolás függvény:
public void masolasFGV(File src, File dest)
throws IOException {
//Meg vizsgáljuk, hogy mappa-e:
if (src.isDirectory()) {
//Megpróbáljuk létrehozni a mappát (ha van, akkor nem csinál semmit)
dest.mkdir();
//Listába rendezzük a mappa tartalmát:
String files[] = src.list();
//Majd egyesével végigmegyünk rajta:
for (String file : files) {
//Elkészítjük a fájlokat:
srcFile = new File(src, file);
destFile = new File(dest, file);
//Rekurzív másolás:
masolasFGV(srcFile, destFile);
}
} else {
// Ha a cél nem létezik, másolunk:
if (!dest.exists()) {
Files.copy(src.toPath(), dest.toPath());
System.out.println("Másolás: " + src);
} else {
System.out.println("Van már: " + src);
}
}
}Ez szép is meg jó is. Viszont szeretnék rajta egy kicsit módosítani. Tök sok olyan van, hogy egy mappában van még egy csomó mappa, meg fájl és ezek már meg vannak és felesleges újra "megvizsgálni" őket. Ezért egyszerűbb lenne: Megadjuk a forrásmappát és a célmappát. Ellenőrzi az utolsó módosítás dátumát (.lastModified()), ha nagyobb (azaz újabb), mint az utolsó mentés dátuma akkor belemegy és végig megy rajta ugyanúgy, mint a fenti példában. Viszont ellenkező esetben az egészet kihagyja. Valakinek ötlet?
Hali.
Ez már korábban is felmerült, mint kérdés.....ha jól emléxem....nem?
-
Aethelstone
addikt
Lennének ötleteim.
Naplófájlba gyűjteni, amit már átmásol korábban és a bejárás során deltát képezni. Az relative gyorsan mehet. Aztán csak a deltát másolni közvetlenül...
Ezzel meg lehet spórolni a kétirányú (src, dest) ellenőrzést...etc -
xTc
aktív tag
-
PandaMonium
őstag
Sziasztok!
Írtam egy nagyon alap Black Jack-et JAVA-ban. Biztos, hogy profi szemmel nézve gányolás lehet néhány helyen a kód. Valaki nem nézne bele és mondaná el, hogy mi az ami nagyon nem jó és, hogy min kellene változtatni, csak hogy tanuljak belőle.

Letöltések:
Két java fileból áll. Egy BlackJack.java (JFrame), itt semmit nem csinálok szinte és egy Asztal.java-ból:
Megjegyzés: Van benne egy ékezetes függvény, az azóta javítottam. Gondolom nem célszerű használni.
Néhány kép:
A GUI-t mivel raktad össze? Gondolom nem írtad mert nagyon sablonos (ez nem rossz dolog, csak feltűnő), meg az az angol komment is eléggé kitűnik a kódból.

-
Mukorka
addikt
Sziasztok!
Írtam egy nagyon alap Black Jack-et JAVA-ban. Biztos, hogy profi szemmel nézve gányolás lehet néhány helyen a kód. Valaki nem nézne bele és mondaná el, hogy mi az ami nagyon nem jó és, hogy min kellene változtatni, csak hogy tanuljak belőle.

Letöltések:
Két java fileból áll. Egy BlackJack.java (JFrame), itt semmit nem csinálok szinte és egy Asztal.java-ból:
Megjegyzés: Van benne egy ékezetes függvény, az azóta javítottam. Gondolom nem célszerű használni.
Néhány kép:
Inkább csak egyetértek a felettem szólóval.
-
WonderCSabo
félisten
Sziasztok!
Írtam egy nagyon alap Black Jack-et JAVA-ban. Biztos, hogy profi szemmel nézve gányolás lehet néhány helyen a kód. Valaki nem nézne bele és mondaná el, hogy mi az ami nagyon nem jó és, hogy min kellene változtatni, csak hogy tanuljak belőle.

Letöltések:
Két java fileból áll. Egy BlackJack.java (JFrame), itt semmit nem csinálok szinte és egy Asztal.java-ból:
Megjegyzés: Van benne egy ékezetes függvény, az azóta javítottam. Gondolom nem célszerű használni.
Néhány kép:
Átfutottam a kódot. fordfairlane megjegyzése teljesen helytálló, azt kell mondjam. Gyakorlatilag a teljes programért az Asztal osztály felel. Nem túl szép, hogy a GUI, az eseménykezelést és az üzleti logikát mind egyetlen osztályba szuszakolod bele. Először is szét kéne választani a GUI-t és a logikát. Erre lehet használni mindneféle architektúrát, pl. MVC-t de az se kell ide, elég legyen annyi, hogy a különböző Swing-es leszármozott osztályaid nem tartalmaznak logikát, továbbá a logikáért felelős osztályok nem is tudnak a GUI-ról. Továbbá az egész kódot lehetne dekomponálni, modulárisabbá tenni. Egy ilyen kártyajátéknál ez egész könnyü, hiszen ez iskolapélda is, pl. ilyen szereplőkről lehetne beszélni: játékos, pakli, kártya, menedzser (lépéseket vezérli), stb.
-
fordfairlane
veterán
Sziasztok!
Írtam egy nagyon alap Black Jack-et JAVA-ban. Biztos, hogy profi szemmel nézve gányolás lehet néhány helyen a kód. Valaki nem nézne bele és mondaná el, hogy mi az ami nagyon nem jó és, hogy min kellene változtatni, csak hogy tanuljak belőle.

Letöltések:
Két java fileból áll. Egy BlackJack.java (JFrame), itt semmit nem csinálok szinte és egy Asztal.java-ból:
Megjegyzés: Van benne egy ékezetes függvény, az azóta javítottam. Gondolom nem célszerű használni.
Néhány kép:
Nem vagyok valami penge Java-ban, de ránézve a pastebin kódodra, ez jutott elsőnek eszembe:
-
xTc
aktív tag
-
xTc
aktív tag
-
-v-
addikt
-
-v-
addikt
Tudnátok segíteni nekem? Ezt akarom használni fájlmásolásra: http://filecopylibrary.sourceforge.net/
Van egy mentesFrame.java JFrame fájlom amin van egy mentesPanel.java JPanelem.
A mentesPanelen van egy gomb ami megnyomásakor grafikus felületen kellene másolnia a FileCopierPanel-nek, SwingWorker-be raktam, de mégse frissíti rendesen az ablakot:
private void mentesGombActionPerformed(java.awt.event.ActionEvent evt) {
mentesFunkciok mFunk = new mentesFunkciok();
try {
mFunk.doInBackground();
} catch (Exception ex) {
Logger.getLogger(mentesAblakPanel.class.getName()).log(Level.SEVERE, null, ex);
}
}A mentesFunkciok fájl:
public class mentesFunkciok extends SwingWorker<Integer, Integer> {
Source[] sources = new Source[]{
new Source("D:\\Elektronikus dolgok\\teszt\\hostgep")
};
String[] destinations = new String[]{
"D:\\Elektronikus dolgok\\teszt\\celgep\\"
};
CopyJob copyJob = new CopyJob(sources, destinations);
@Override
protected Integer doInBackground() throws Exception {
JFrame frame = new JFrame();
frame.setSize(400, 200);
frame.setLocationRelativeTo(null);
FileCopierPanel panel = new FileCopierPanel();
FileCopier fc = new FileCopier();
panel.setFileCopier(fc);
frame.add(panel);
frame.setVisible(true);
fc.copy(copyJob);
return null;
}
}Min kellene változtatnom, hogy ne csak "fehérség" legyen az ablakban másolás végén?
Tyű itt valami nagy kavar van. A swingworkernek épp az a lényege, hogy ne az EDT-ről csinálj egy hosszú műveletet - a doInBackground() metódus másik szálról hívódik meg. Viszont bármilyen UI elemet buzerálni meg csak az EDT-ről szabad.
-
xTc
aktív tag
Tudnátok segíteni nekem? Ezt akarom használni fájlmásolásra: http://filecopylibrary.sourceforge.net/
Van egy mentesFrame.java JFrame fájlom amin van egy mentesPanel.java JPanelem.
A mentesPanelen van egy gomb ami megnyomásakor grafikus felületen kellene másolnia a FileCopierPanel-nek, SwingWorker-be raktam, de mégse frissíti rendesen az ablakot:
private void mentesGombActionPerformed(java.awt.event.ActionEvent evt) {
mentesFunkciok mFunk = new mentesFunkciok();
try {
mFunk.doInBackground();
} catch (Exception ex) {
Logger.getLogger(mentesAblakPanel.class.getName()).log(Level.SEVERE, null, ex);
}
}A mentesFunkciok fájl:
public class mentesFunkciok extends SwingWorker<Integer, Integer> {
Source[] sources = new Source[]{
new Source("D:\\Elektronikus dolgok\\teszt\\hostgep")
};
String[] destinations = new String[]{
"D:\\Elektronikus dolgok\\teszt\\celgep\\"
};
CopyJob copyJob = new CopyJob(sources, destinations);
@Override
protected Integer doInBackground() throws Exception {
JFrame frame = new JFrame();
frame.setSize(400, 200);
frame.setLocationRelativeTo(null);
FileCopierPanel panel = new FileCopierPanel();
FileCopier fc = new FileCopier();
panel.setFileCopier(fc);
frame.add(panel);
frame.setVisible(true);
fc.copy(copyJob);
return null;
}
}Min kellene változtatnom, hogy ne csak "fehérség" legyen az ablakban másolás végén?
@Override
protected Integer doInBackground() throws Exception {JFrame frame = new JFrame();
frame.setSize(400, 200);
frame.setLocationRelativeTo(null);
FileCopierPanel panel = new FileCopierPanel();
FileCopier fc = new FileCopier();
panel.setFileCopier(fc);
frame.add(panel);
frame.setVisible(true);fc.copy(copyJob);
return null;}
Itt null-t adsz vissza, és Integert specifikálsz. Nem biztos, hogy ez a hiba, de ez így biztosan nem az igazi.
-
DopeBob
addikt
Sziasztok!
A cégnél ahol dolgozom van egy elég kokány Java-ban írt mentéskészítő alkalmazásunk. Arra gondoltam, hogy teljesen újraírnám, mert néha furcsán viselkedik. Tanultam főiskolán Java programozást, így az alapok meg vannak és tényleg nem bonyolult. Viszont pár dologban a segítségeteket szeretném kérni.
Amit tudni kell:
NetBeans 7.4-et használok
7-es Java-val.A program az alábbiakat tudja:
Van egy grafikus felület. Rajta egy információs sor, ahol megjelenik az utolsó mentés dátuma, illetve a mentés hosszának ideje. Ezen kívül egy gomb van még Mentés felirattal. A gomb megnyomásakor ellenőrzi, hogy meg vannak-e a szerveren a mentendő fájlok (/home/server/mentendok), be van-e dugva a mentéshez használatos külső merevlemez (dev/eszkozneve). Ha minden oké, akkor felcsatolja a lemezt, a /mnt/mentes-disk alá. Majd elkezdi másolni az adatbázis fájlokat, ebből 4 van. Ha ezzel végzett akkor van egy pdf nevű mappa, amiben körülbelül 10 ezer kisebb fájl van. Ezeket is elkezdi másolni, viszont ha már meg van akkor kihagyja. Ha végzett, akkor lecsatolja a merevlemezt, frissíti az ablakon lévő információkat (utolsó mentés, mentés hossza).
Szóval ezt kellene megírni. Ti merre indulnátok el? Mit használnátok lemez csatoláshoz és lecsatoláshoz Linux alatt?
Biztos, hogy erre a Java a legalkalmasabb? Van nagyon jól működő backup program linuxra kismillió+1, de erre még egy sima shell script is megfelelhet
-
xTc
aktív tag
Sziasztok!
A cégnél ahol dolgozom van egy elég kokány Java-ban írt mentéskészítő alkalmazásunk. Arra gondoltam, hogy teljesen újraírnám, mert néha furcsán viselkedik. Tanultam főiskolán Java programozást, így az alapok meg vannak és tényleg nem bonyolult. Viszont pár dologban a segítségeteket szeretném kérni.
Amit tudni kell:
NetBeans 7.4-et használok
7-es Java-val.A program az alábbiakat tudja:
Van egy grafikus felület. Rajta egy információs sor, ahol megjelenik az utolsó mentés dátuma, illetve a mentés hosszának ideje. Ezen kívül egy gomb van még Mentés felirattal. A gomb megnyomásakor ellenőrzi, hogy meg vannak-e a szerveren a mentendő fájlok (/home/server/mentendok), be van-e dugva a mentéshez használatos külső merevlemez (dev/eszkozneve). Ha minden oké, akkor felcsatolja a lemezt, a /mnt/mentes-disk alá. Majd elkezdi másolni az adatbázis fájlokat, ebből 4 van. Ha ezzel végzett akkor van egy pdf nevű mappa, amiben körülbelül 10 ezer kisebb fájl van. Ezeket is elkezdi másolni, viszont ha már meg van akkor kihagyja. Ha végzett, akkor lecsatolja a merevlemezt, frissíti az ablakon lévő információkat (utolsó mentés, mentés hossza).
Szóval ezt kellene megírni. Ti merre indulnátok el? Mit használnátok lemez csatoláshoz és lecsatoláshoz Linux alatt?
Helló!
Nagyjából a standard File API alkalmas arra, amit szeretnél. Fájl másolás, meglétének validálása abszolút nem gond. Viszont a diszk mount/unmount témakör már kérdésesebb. A java.lang.Process csomaggal szerintem ezt is meg lehetne oldalni. Viszont, a privilégiumszint emelést (root jog "megszerzése") is meg kell oldanod.
Biztosan van olyan, aki nagyobb tapasztalattal rendelkezik a témában mint én, hátha van ennél egyszerűbb megoldás is.
-
floatr
veterán
Sziasztok!
A cégnél ahol dolgozom van egy elég kokány Java-ban írt mentéskészítő alkalmazásunk. Arra gondoltam, hogy teljesen újraírnám, mert néha furcsán viselkedik. Tanultam főiskolán Java programozást, így az alapok meg vannak és tényleg nem bonyolult. Viszont pár dologban a segítségeteket szeretném kérni.
Amit tudni kell:
NetBeans 7.4-et használok
7-es Java-val.A program az alábbiakat tudja:
Van egy grafikus felület. Rajta egy információs sor, ahol megjelenik az utolsó mentés dátuma, illetve a mentés hosszának ideje. Ezen kívül egy gomb van még Mentés felirattal. A gomb megnyomásakor ellenőrzi, hogy meg vannak-e a szerveren a mentendő fájlok (/home/server/mentendok), be van-e dugva a mentéshez használatos külső merevlemez (dev/eszkozneve). Ha minden oké, akkor felcsatolja a lemezt, a /mnt/mentes-disk alá. Majd elkezdi másolni az adatbázis fájlokat, ebből 4 van. Ha ezzel végzett akkor van egy pdf nevű mappa, amiben körülbelül 10 ezer kisebb fájl van. Ezeket is elkezdi másolni, viszont ha már meg van akkor kihagyja. Ha végzett, akkor lecsatolja a merevlemezt, frissíti az ablakon lévő információkat (utolsó mentés, mentés hossza).
Szóval ezt kellene megírni. Ti merre indulnátok el? Mit használnátok lemez csatoláshoz és lecsatoláshoz Linux alatt?
Ha már adott a rendszer, és nem szégyellném használni az OS adottságait, és shell parancsokat osztogatnék

Persze meg lehet kézzel csinálni a file másolgatást is, de a binugz shell parancsokkal gyorsabban lehet haladni, bár ezzel kötöd magad a rendszerhez.
-
alratar
addikt
-
Karma
félisten
-
Karma
félisten
Azért Java-ban akarom megírni, mert az már készen van egy ideje, csak most kicsit változott, hogy mit kell menteni. 5 adatbázis fájl mellé bejött még kettő, illetve egy mappa kisebb csatolmányokkal. Abból nagyon sok van, de mivel napi mentés van, ezért csak 10-50 db-ot kell egy nap elmenteni ami új.
Akkor, ha jól értem, meg tudnám azt is tenni udev-vel, hogy mountolodjon egy USB csatlakoztatáskor? Mert az lenne akkor talán a legjobb.
Arra most is használják a desktop disztribúciók, szóval persze.
Némi infó. -
Karma
félisten
De ez egy folyamatosan futó szerver. Amihez odasétálnak rádugnak egy pendrive-ot, majd utána lehúzzák. Ezért kellene a programból megoldani a mountot és az umountot.
SZERK: Nem rendesen csatolja le néha, és olyankor lehúzza az éppen mentő kolléga és az eléggé nem tesz neki jót.
A következő kód lehet, hogy rossz:
java.lang.Runtime runtime = java.lang.Runtime.getRuntime();
java.lang.Process process= runtime.exec("sudo umount /mnt/pendrive");
process.waitFor();Halk kérdés: erre miért Java alkalmazást írsz, miért nem használod az rsyncet (sok apró fájl szisztematikus másolásához) egy bash szkriptből?
-
TBG
senior tag
De ez egy folyamatosan futó szerver. Amihez odasétálnak rádugnak egy pendrive-ot, majd utána lehúzzák. Ezért kellene a programból megoldani a mountot és az umountot.
SZERK: Nem rendesen csatolja le néha, és olyankor lehúzza az éppen mentő kolléga és az eléggé nem tesz neki jót.
A következő kód lehet, hogy rossz:
java.lang.Runtime runtime = java.lang.Runtime.getRuntime();
java.lang.Process process= runtime.exec("sudo umount /mnt/pendrive");
process.waitFor();Ah, annyira rühellem, hogy harapófogóval kell kihúzni belőled mindent.
Tisztázzuk, olyan Java kód nincs, ami a megakadályozza, hogy kihúzzák a pendrive-ot. Azt tudod csinálni, ahogy korábban is mondtam, hogy az /mnt/pendrive könyvtárat csekkolod...ha már nem létezik, akkor le van választva.... -
TBG
senior tag
De ez egy folyamatosan futó szerver. Amihez odasétálnak rádugnak egy pendrive-ot, majd utána lehúzzák. Ezért kellene a programból megoldani a mountot és az umountot.
SZERK: Nem rendesen csatolja le néha, és olyankor lehúzza az éppen mentő kolléga és az eléggé nem tesz neki jót.
A következő kód lehet, hogy rossz:
java.lang.Runtime runtime = java.lang.Runtime.getRuntime();
java.lang.Process process= runtime.exec("sudo umount /mnt/pendrive");
process.waitFor();Jó. Akkor kanyarodjunk vissza. Mit értettél az alatt, hogy nem mindig sIkerül?
-
TBG
senior tag
-
TBG
senior tag
-
PandaMonium
őstag
Hogy érted, hogy egy pendrive bánta azóta? Ha úgy ahogy gondolom az elég érdekes, nem hinném, hogy terminálból lehetséges tönkretenni egy flash drive-ot.

-
WonderCSabo
félisten
Ez attól függ, hogy mekkorák a fájlaid, amiket másolsz. Ha sok kicsi fájlod van, akkor kis buffert érdemes választani, ha nagyokat, akkor lehet nagyobbat is.
A Files.copy() metódusban 8K-s buffer van alapból, érdemes azt választani, valószínűleg a Java mérnökei hosszas tesztelés után választották azt a méretet. Ja és nem megy megás, hanem egy kilobájtos buffer van a Te kódodban.
Na már megint megelőztek.

-
Karma
félisten
Túl nagyot nem érdemes foglalni, mert sok időt vesztesz mindkét irányban. A praktikus méret a fájlrendszer clustermérete vagy annak kerek többszöröse - mondjuk a 8192 byte egy elég biztonságos választás.
-
fatal`
titán
Castolod intnek, vagy kerekíted.
-
TBG
senior tag
Akkor pedig az a gyanúm, hogy fut a gc a sok objektum miatt és ezért nem látsz memória növekedést. Próbáld meg a cikluson kívül deklarálni a stream-eket..tipp...esetleg nézhetnéd, hogy a fájlműveletek hogyan alakulnak OS szinten. Lehet, hogy az OS-ben torlódnak a másolási műveletek.
-
Superhun
addikt
-
Superhun
addikt
Köszi mindenkinek, valóban az volt a probléma.

Viszont most az elején szépen elindul a másolás, majd a végére belassul. Nem kellene valami buffert üríteni? Vagy valami amitől gyorsabb lenne?
if (!dest.exists()) {
atmasoltFajlok++;
//if file, then copy it
//Use bytes stream to support all file types
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest);
byte[] bufferPDF = new byte[1024 * 4];
int length;
//copy the file content in bytes
while ((length = in.read(bufferPDF)) > 0) {
out.write(bufferPDF, 0, length);
}
in.close();
out.close();
}Plusz utána másolok még más fájlokat, azok is sokkal lassabbak lesznek...
Memóriahasználat hogy növekszik a másolás során? Én egyébként nem látok hibát, hiszen minden megnyitott erőforrást lezársz.
-
Karma
félisten
-
TBG
senior tag
Köszi mindenkinek, valóban az volt a probléma.

Viszont most az elején szépen elindul a másolás, majd a végére belassul. Nem kellene valami buffert üríteni? Vagy valami amitől gyorsabb lenne?
if (!dest.exists()) {
atmasoltFajlok++;
//if file, then copy it
//Use bytes stream to support all file types
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest);
byte[] bufferPDF = new byte[1024 * 4];
int length;
//copy the file content in bytes
while ((length = in.read(bufferPDF)) > 0) {
out.write(bufferPDF, 0, length);
}
in.close();
out.close();
}Plusz utána másolok még más fájlokat, azok is sokkal lassabbak lesznek...
Ha van lehetőséged, akkor szerintem ezzel próbáld: http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html
-
WonderCSabo
félisten
Egyébként nekem az a tippem, hogy a szamlalo kisebb, mint 100, ezért annak az egész típusú osztásnak eredménye 0 lesz. Így a következő műveletben 0-val osztasz, és emiatt AritmethicException dobódik. Vagy esetleg a szamlalo eleve 0.
Superhun megelőzött, miközben a hszt írtam.
-
Superhun
addikt
Sztem 0-val osztasz

Egyébként ez így nem jó, mert egész számok osztása egész számot ad vissza, ezért is írtam a float castolást fentebb.
-
PandaMonium
őstag
Nincs sok ötletem, de ez esetleg egy próbát megér
:
String szazalek = String.valueOf(atmasoltFajlok / (szamlalo / 100));
Vagy esetleg:
String szazalek = Integer.toString(atmasoltFajlok / (szamlalo / 100));
Majd írj, hogy jó-e vele vagy sem.
-
WonderCSabo
félisten
-
Superhun
addikt
Azóta már megoldottam. Köszönöm.

Most a progress barral szívok. Eddig úgy csináltam, hogy másolás előtt megszámoltam mennyi fájl van a kiinduló mappába, majd abból és az átmásolt fájlok számából generáltam a százalékot. Csak ugye ez nem igen működik abban az esetben, ha nem kell fájlokat felülírni.
Futtass egy ciklust a konkrét másolás előtt, amiben megszámolod, hogy hány fájl nem létezik a célmappában a forrás mappából. Miután ez megvan, kell egy másik számláló, amit megnövelsz eggyel, ha nem létezik egy fájl és másolni kell. A százalék pedig a (float) atmasoltFajlokSzama / masolandoFajlokSzama * 100;
-
n00n
őstag
Azóta már megoldottam. Köszönöm.

Most a progress barral szívok. Eddig úgy csináltam, hogy másolás előtt megszámoltam mennyi fájl van a kiinduló mappába, majd abból és az átmásolt fájlok számából generáltam a százalékot. Csak ugye ez nem igen működik abban az esetben, ha nem kell fájlokat felülírni.
Csak azt kellene megszámolnom ami nem létezik fájl. Eddig így néz ki (ez a létezőket is beleszámolja):
private void fajlokSzama(String dirPath) {
File f = new File(dirPath);
File[] files = f.listFiles();
if (files != null) {
for (int i = 0; i < files.length; i++) {
File file = files[i];
if (file.isDirectory()) {
szamlalo++;
fajlokSzama(file.getAbsolutePath());
} else {
szamlalo++;
}
}
}
}Ötlet?
Ugye a file-ba van benne az elérési út. Pl d:/innen\masol\1.fajl. Ebben kellene a d:/innen/ lecserélni d:/ide/-re.
-
Superhun
addikt
Ezt sikerült is implementálni. Viszont ez másoláskor felülírja a már meglévő fájlokat. Mit változtassak rajta, hogy ki hagyja azokat amik már léteznek? Ez azért fontos mert több millió kis fájlt kell másolnom, ami baromi hosszú. De naponta futna a másolás és ilyenkor csak pár fájl eltérés lenne.
Nem mondtam, hogy meg is oldja a feladatot, csak azt, hogy egy jó kiindulási pont.

Annyi hiányzott volna csak, hogy az else ágban lévő kód köré egy if (!dest.exists()) {...} blockot raksz. Vagy szimplán átírod az else-t else if (!dest.exists())-re.
-
xTc
aktív tag
Sziasztok!
Írogatok egy programot amiben szükségem lenne a következő funkcióra: Adott egy mappa, benne több száz kis mappával, azokban fájlok. A programnak úgy kellene másolni ezt a mappát, hogy semmit nem ír felül, csak az új dolgokat másolja progress barral, tudnátok adni egy kis iránymutatást?
Progress bar-hoz én JavaFX-t használnék, nem tudom, hogy a program UI-része, hogyan is áll. Másolás vonalon meg elsőkörösen az elérési útját illetve a nevét ellenőrizném.
-
Superhun
addikt
Sziasztok!
Írogatok egy programot amiben szükségem lenne a következő funkcióra: Adott egy mappa, benne több száz kis mappával, azokban fájlok. A programnak úgy kellene másolni ezt a mappát, hogy semmit nem ír felül, csak az új dolgokat másolja progress barral, tudnátok adni egy kis iránymutatást?
Kiindulásnak ez a példakód szerintem egész jó. Ha van még kérdésed, írj.
-
TBG
senior tag
Hagytam az egészet inkább és írtam magamtól egy JDialogot egy JProgressbar-ral. Mondjuk azért meglep, hogy egy ekkora bug nincs javítva a Java-ban. Más nem fut bele? Azért ez nem valami szélsőséges felhasználás szerintem, hogy 2GB-nál nagyobb fájlt akarok vele másoltatni és frissíteni a progresst.
Ennél nagyobb bugok is vannak
Egyébként a 2 GB-nél nagyobb fájl másolása progress barral nem napi szintű feladat...az ilyeneket általában maintenance jelleggel, háttérben csinálják. -
TBG
senior tag
Találtam egy ilyet: Bug #6445283
Ez a jelenség ami nálam is van:
"Progress monitor goes to 100% at 2GB, then back to 0%, stays at 0% until 4GB is reached, then goes from 0% to 100% at 6 GB, etc. User has no idea how long entire file will take or may think process is "hung" after 2GB."
Van egy workaround, viszont nem értem mit kellene csinálni:
"CUSTOMER SUBMITTED WORKAROUND :
I've changed the ProgressMonitorInputStream class to "scale" the progress to 32 bits (so ProgressMonitor can use it) after obtaining the file size using FileChannel.size() if the input parameter to ProgressMonitorInputStream constructor is instanceof FileInputStream."Nem elég részletes a workaround. Belenyúlt a gyári osztályba vagy csak egy @Override-t használt?
Szerk:
http://developer.classpath.org/doc/javax/swing/ProgressMonitorInputStream-source.html
Elvileg egy extend elég lenne, csak a ProgessMonitor ugyancsak int-et vár és nem long-ot.

76-93Szóval azt is extendálni kellene...
-
WonderCSabo
félisten
-
WonderCSabo
félisten
Most hirtelen én sem tudom a választ. Javaslom tedd fel a kérdést Stackoverflow-n.
-
TBG
senior tag
A legegyszerűbb, ha ideírom a forráskódot:
class Copy extends SwingWorker<Void, Void> {
private File selectedfile = new File("D:/Adatok/proba.file");
private File chosenDestination = new File("D:/Adatok/ide/proba.file");
@Override
protected Void doInBackground() throws Exception {
try {
FileInputStream fileInputStream = new FileInputStream(
selectedfile);
BufferedInputStream bufferedInputStream = new BufferedInputStream(
fileInputStream);
ProgressMonitorInputStream progressMonitorInputStream;
UIManager.put("ProgressMonitor.progressText", "Mentés másolása");
UIManager.put("OptionPane.cancelButtonText", "Mégse");
progressMonitorInputStream = new ProgressMonitorInputStream(MentesPanel.this, "Fájl másolása folyamatban", bufferedInputStream);
File outputFile = new File("" + chosenDestination);
FileOutputStream fileOutputStream = new FileOutputStream(
outputFile);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(
fileOutputStream);
int data;
byte[] buffer = new byte[1024];
while ((data = progressMonitorInputStream.read(buffer)) > 0) {
bufferedOutputStream.write(buffer);
}
bufferedOutputStream.close();
progressMonitorInputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
public void done() {
JOptionPane.showMessageDialog(MentesPanel.this, "A mentés másolása befejeződött!", "Kész", 1);
}
}
}byte[] buffer = new byte[1024];
Próbálj meg egy nagyobb buffert. Akár 4096 is lehet.
-
TBG
senior tag
-
MrSealRD
veterán
-
WonderCSabo
félisten
-
WonderCSabo
félisten
-
WonderCSabo
félisten
Ez alapján megírtam. Viszont ugye mondanom se kell, hogy "üres" ablakot látok, mert lefogja a GUI-t a fájlmásolás. Ezért írtam egy külön osztályt ami egy szál és azon hozom létre a ProgressMonitorInputStream-t. Viszont a konstruktor első eleme a szülő. Hogyan tudom megadni a főablakomat, mert az alapértelmezetten private?
private sajatfeladat.FoPanel foPanel1;
Ott vmi gáz lesz, mert a SwingWorkernek pont az a lényege, hogy a doInBackground fv, amit az execute hív meg, egy külön szálon fut le.
Cím:
UIManager.put("ProgressMonitor.progressText", "Progress title?");
-
n00n
őstag
Ez alapján megírtam. Viszont ugye mondanom se kell, hogy "üres" ablakot látok, mert lefogja a GUI-t a fájlmásolás. Ezért írtam egy külön osztályt ami egy szál és azon hozom létre a ProgressMonitorInputStream-t. Viszont a konstruktor első eleme a szülő. Hogyan tudom megadni a főablakomat, mert az alapértelmezetten private?
private sajatfeladat.FoPanel foPanel1;
További kérdés: Keresem, de nem találok rá módot, hogy átírjam a ProgressMonitorInputStream címét, illetve, hogy ne legyen cancel gomb. Nincs ilyen konstruktora és metódusai sem. Ötlet?
Szerk.: Valóban. Én néztem be. Ebben a hozzászólásban azonban még mindig nem tudtam megoldani a címet és mégse gombot.
-
WonderCSabo
félisten
Sziasztok!
Van egy egyszerű java projektem. Van benne JFrame, rajta egy JPanelel. Ezen van egy JButton, amire ha rányomok megjelenik egy JDialog. A JDialogon van egy JProgressBar. Amit szeretnék, hogy mikor megjelenik a JDialog kezdje el a fájlt másolni (gondolom külön szálon) és frissítse a JProgressBart. Ötlet, hogy merre induljak el?
Egyelőre itt vagyok:
JDialog:
private int allapot=0;
allapotJelzo.setValue(allapot);
allapotJelzo.setStringPainted(true);És egy tipp pluszban: magyar nyelvű neveket felejtsd el a kódban.
-
modder
aktív tag
Ilyen egyszerű esetekben, illetve ha fontos a sebesség, érdemes inkább megkeresni a ";" helyét String.indexOf vagy String.lastIndexOf függvénnyel, aztán a két adatot a String.substring függvénnyel kiszedni az eredetiből.
Fapadosabb megoldás, de gyorsabb.
10 sornál nem lesz érezhető különbség, de több száz sornál már igen.
Új hozzászólás Aktív témák
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Yettel topik
- Digitális Állampolgárság Program DÁP
- Napokon belül váratlan versenyzővel bővül a VGA-piac
- Rap, Hip-hop 90'
- Kezdő fotósok digitális fényképei
- Poco F8 Ultra – forrónaci
- Építő/felújító topik
- MasterDeeJay: Low budget (50.000 forint) light gémer gép összerakása
- Samsung Galaxy S25 - végre van kicsi!
- Új Intel CPU-kkal jön a Surface Pro 12 és a Surface Laptop 8 for Business
- További aktív témák...
- Új MSI 16 Sword WUXGA 144Hz i7-14650HX 5.2Ghz 16mag 16GB 1TB SSD Nvidia RTX 4070 8GB Win11 Garancia
- Legújabb Thinkpad T14 gen6 - Bontatlan + magyar! - Core Ultra 7 255U - 16/32GB - 512GB - Gyártói gar
- Fujitsu 27" B27-9 TE Full HD 1920x1080 hófehér monitor - több db - gari számla - állítható magasság
- Kingston HyperX és FURY 16Gb (20-22k) és 32GB DDR4 (47k) laptop ramok párban is 2666Mhz/3200Mhz
- Lenovo Thinkpad T14s gen 6 - Teljesen új - Ryzen AI 7 PRO 350 - 32GB - 512GB - 2028 októberig gari!
- Xbox One S 512 GB + kontroller 6 hó garancia, számlával!
- ÚJ/BONTATLAN Microsoft Surface Laptop 6 Ultra 7 165H 16GB 512GB
- GYÖNYÖRŰ iPhone 14 Pro 256GB Space Black -2 ÉV GARANCIA - Kártyafüggetlen, MS5415
- Azonnali készpénzes nVidia RTX 3000 sorozat videokártya felvásárlás személyesen / csomagküldéssel
- 27% - NZXT N7 Z790 FEHÉR ALAPLAP!
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest



Egyébként már a jd-guival kimentett java fájlt sem tudom javac-vel lefordítani class-ra, pedig nem is módosítottam és ugyanazt a verziót használom...






