Hirdetés
Új hozzászólás Aktív témák
-
pakriksz
őstag
nézegethetem, nem lehet vele mit tenni. A transformer egyben adja ki az egészet, 1 stringbe megy. És a java mint írtam megbolondul egy bizonyos stringhossz után (sorok elejét lehagyja, randomban eltologatja a tageket, stb).
a sax nagyon dzsunkának néz ki, kb olyan mintha binárisba kódolnék programotÉs biztos hogy a végeredmény is ugyan ez lenne.
[ Szerkesztve ]
-
válasz
RaPiDsHaRe #3393 üzenetére
Start menü keresőjébe: a rendszer környezeti változóinak módosítása
Legalul lesz egy gomb: Környezeti változók. Alul Új gomb, névhez: CLASSPATH, értékhez egy pont.
De ez tényleg veszélyes lehet, inkább csináld azt, amit előttem írt a kolléga.
[ Szerkesztve ]
-
Lortech
addikt
Egy akármi alkalmazás futtatása miatt nem szoktunk globálisan classpatht beállítani. Kényelmetlen, értelme nem sok, és alattomos problémákhoz vezethet, ha az ember megfeledkezik róla. Ha már a CLASSPATH környezeti változóval akarunk classpatht megadni a jvm-nek, akkor az alkalmazás indítóscriptjében egyszerűen beállítjuk a változót.
run.bat tartalma:
SET CLASSPATH=..\classes
java package.akarmi.MainClassEgy-két cp bejegyzésre ez is felesleges, helyette:
java -classpath ..\classes package.akarmi.MainClass[ Szerkesztve ]
-
MrSealRD
veterán
válasz
RaPiDsHaRe #3389 üzenetére
Windsows-ba kell.
-
MrSealRD
veterán
válasz
RaPiDsHaRe #3386 üzenetére
Mondjuk lehet hülyeséget mondok most de érdemes feltenni a Java JDK-t és akkor az megcsinálja a classpath-ot is...
-
Davs
tag
válasz
RaPiDsHaRe #3386 üzenetére
Szerintem CLASSPATH hiba..Letre kell hozni windowson egy CLASSPATH nevu enviromental variablet, aminek az erteke "." (" nelkul). Sajatgepen jobbklikk -> Properties -> Advanced system settings es a felugro ablak aljan ott a gomb
-
MrSealRD
veterán
válasz
RaPiDsHaRe #3383 üzenetére
Azt nem én linkeltem, csak egyforma az avatar...
A Window-> Preferences -> Installed JRE-be tudod megadni a futtatókörnyezet helyét...
Tudtommal mást nem kell... -
MrSealRD
veterán
válasz
RaPiDsHaRe #3381 üzenetére
A Classic-ot szedd le, az kell neked.
-
válasz
RaPiDsHaRe #3378 üzenetére
A JPA projekt az webes alkalmazás, te gondolom asztali gépre akarsz fejleszteni. Ezt töltsd le.
-
pakriksz
őstag
Egy xml-t szeretnék módosítani, és menteni, és ez mind működik.
A probléma az, hogy egy hulladék gány programnak készül ez az xml, ami a void tag-et (vagy hogy hívják) nem fogadja el. Tehát ha a tagek közötti érték semmi, az hogy <Valami/> az nem jó neki (márpedig a java így állítja elő), csak a <valami><valami/> jó
Erre azt találtam ki, hogy ahol üres az érték, beszúrok egy spacet így lesz <valami> <valami/> de ez sem jó neki mert a spacet értéknek veszi...
Transformer osztályt használok, és DOM-ból jön az xml.Mi erre a megoldás?
[ Szerkesztve ]
-
RaPiDsHaRe
aktív tag
Sziasztok!
Az Eclips-nél, ha Java-t szeretném használni, hogy kell beállítani, hogy rendesen működjön? Mert a File\New\ JPA Project-re mentem, de ott eladtam.
-
TBG
senior tag
válasz
Peter Kiss #3373 üzenetére
Igaz. Egy cseppet benéztem. Az adapter arra megoldás, hogy ha van egy interfészed, aminek van 100+1 metódusa, de egy új metódust nem kell mindenhol feltétlenül megvalósítani, hanem alapértelmezésben csak egy üres metódusblokk lenne null visszatérési értékkel.
-
artiny
őstag
Java programozáshoz létezik magyar turtorial video, esetleg ha nincs valami nagyon jo konyv?
-
WonderCSabo
félisten
válasz
Peter Kiss #3373 üzenetére
Meg persze ha változik az interface, az adaptert módosítani kell. Semmiképpen nem lehet megúszni azt, hogy másik osztályt ne kelljen átírni.
-
pvt.peter
őstag
válasz
Peter Kiss #3371 üzenetére
Értem, köszönöm a választ.
-
TBG
senior tag
válasz
Peter Kiss #3371 üzenetére
Interface esetén ezt nem lehet kivitelezni: ha bekerül az interface-be egy plusz elem, akkor azt a régi kódokban is implementálni kell
Elvileg egyébként erre is van megoldás.
-
Peter Kiss
őstag
válasz
pvt.peter #3370 üzenetére
Van egy abstract osztályod, benne dolgokkal. Két év múlva kiderül, hogy jó lenne, ha lenne benne plusz egy metódus. Simán lehet módosítani az osztályt anélkül, hogy a régi kódokat elrontanád vele.
Interface esetén ezt nem lehet kivitelezni: ha bekerül az interface-be egy plusz elem, akkor azt a régi kódokban is implementálni kell. (Abstract osztály esetén lehet pl. az adott új metódusnak üres blokkja vagy egy default implementációja (pl. return null; ).)
[ Szerkesztve ]
-
pvt.peter
őstag
válasz
Peter Kiss #3367 üzenetére
@sutszi, @TBG, @hunfatal köszönöm szépen a válaszokat
illetve @Athlon64+
"Abstract osztályt lehet verziózni"
erre tudnál nekem egy példát mutatni, hogy ez mit is jelent? -
fatal`
titán
válasz
pvt.peter #3358 üzenetére
"Mi még köztük a különbség? Melyiket érdemes használni?"
Származtatáskor van különbség. Ha nincs szükséged semmilyen függvény implementációjára (értsd, olyan abstract osztályod lenne, amiben csak abstract függvények vannak), akkor érdemes interfacet használni, mert interfaceből egy osztály bármennyit implementálhat, viszont származtatni csak egy osztályból lehet. -
TBG
senior tag
válasz
WonderCSabo #3365 üzenetére
ha valami nagy memória igényű cuccot töltök be
Ilyet én nem tennék singletonba..se lazy se eager módon...helper osztályok
Bár androidot még sosem programoztam, ezért csak eméletileg pofáztam bele
-
TBG
senior tag
válasz
pvt.peter #3358 üzenetére
Az interfész osztály és az absztrakt osztály közötti különbségek.
E kettő dolog között a különbség "szinte" csak az abstract és az interface kulcsszavak.
Mi még köztük a különbség? Melyiket érdemes használni?Azért ez nem így van. Az interfész gyakorlatilag csak meghatároz megvalósítandó metódusokat.
Ezzel szemben az absztrakt osztályban lehetnek absztrakt metódusok, amiket meg kell valósítani az örökösnek, DE lehetnek benne nem absztrakt metódusok is, amik valami konkrétumot csinálnak.Persze ezt lehet variálni, amikor egy absztrakt osztály megvalósít egy interfészt, de az implementációk absztraktok lesznek.....így azokat az örökösben kell implementálni...és ott már gyakorlatilag nem látszik, hogy az eredetileg az absztrakt osztály absztrakt metódusait valósítom meg vagy az absztrakt osztály által implementált interfész metódusait
És melyiket érdemes? Erre nincs egységes recept. Általánosságban elmondható, hogy ha többszörös öröklődést akarsz megvalósítani(ami Javában alapból nincs), akkor interfész, de ha tuti, hogy csak egy őst akarsz, de kellenek default metódusok is, akkor absztrakt. Perszem azt is lehet, hogy
Interface-->default class implements interface-->örökös
vagy
absztrakt class-->örökös
vagy
Interface->absztrakt class absztrakt metódusok-->örökös
szóval...a lehetőségek végtelen tárháza
[ Szerkesztve ]
-
Gyuri16
senior tag
válasz
WonderCSabo #3363 üzenetére
persze, lehet igy is, csak nem latom ertelmet a lazy init.-nek. Singletonnal mast nem lehet csinalni, csak meghivni a getInstance fuggvenyet, ekkor betolti a classloader es letrejon az objektum is. Te szokod hasznalni az osztalyt anelkul, hogy szukseg lenne peldanyositani?
-
WonderCSabo
félisten
válasz
Gyuri16 #3362 üzenetére
Azért meg lehet oldani simán a thread-safe legyen, általában ezt szoktam használni:
public class Singleton {
private Singleton() { }
private static class SingletonHolder {
public static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
} -
Gyuri16
senior tag
amig van referencia az objektumra, addig a gc nem torli. Singleton eseteben tobbnyire azt jelenti, hogy amig fut a program addig letezik az objektum is (amig van referencia a classloaderre).
masik dolog: nem ajanlom, hogy igy implementald a singletont, a lazy initialization tobb threades kornyezetben kellemetlenseget okoz. egyszerubb igy
private static MyClass myClassInstance = null ;
helyett
private static MyClass myClassInstance = new MyClass(); -
Davs
tag
Hali!
Singleton osztalyokkal es GC-vel kapcsolatban lenne egy kerdesem..Ha van egy osztalyom, pl
public MyClass {
private static MyClass myClassInstance = null ;
private MyClass() {}public static MyClass getInstance() {
if(myClassInstance == null) { myClassInstance = new MyClass(); }
return myClassInstance ;
}
}Naugye most az osztalynak van referenciaja sajat magara. GC amennyire en tudom addig nem torol egy objektumot, amig van ra valahol strong reference. Mi a helyzet ebben az esetben? Mikor fogja a GC torolni az osztaly? Van kulonbseg az kozott, hogy egy osztalynak van referenciaja magara es akozott, hogy mas osztalynak van referenciaja az adott osztalynak?
-
MrSealRD
veterán
válasz
pvt.peter #3358 üzenetére
Majd ezt még kiegészítik páran...mert amit írok kevés de egy alapvető dolog:
Interfészből bármennyit implementálhat egy osztály.
DE egy osztály csak egyetlen őssel rendelkezhet.
Ezért el kell dönteni a tervezési fázisban, hogy egy adott dolog esetén melyiket kell használni... -
pvt.peter
őstag
Sziasztok!
Egy kérdés merült fel bennem interfészekkel kapcsolatban.
Tehát interfész definíciója: (teljesség hiányával)
"Minden operáció impliciten absztrakt"
->tehát csak az adott fgv. feje van az interfészben, tehát csak definiálva vanAz implicit szót nem véletlen emeltem ki az előbb.
Azt is tudjuk, hogy az interfész az egy speciális absztrakt osztály.
Absztrakt osztály definíciója, többek közt:
Egy osztály absztrakt osztály, ha legalább egy absztrakt metódust tartalmaz.Egy absztrakt osztály tartalmazhat olyan absztrakt függvényt, amelynek van implementációja abban az adott absztrakt osztályban.
És itt jönne a kérdésem:
Impliciten absztraktnak nevezzük az előbb említett interfészben levő operációt, míg explicitnek nevezzük az utóbb említett absztrakt osztályban levő absztrakt függvényt amelynek van implementációja?A kérdésemmel arra szeretnék rávilágítani, hogy helyesen mondtam-e az explicit és az implicit közötti különbséget.
Illetve lenne még vmi.
Az interfész osztály és az absztrakt osztály közötti különbségek.
E kettő dolog között a különbség "szinte" csak az abstract és az interface kulcsszavak.
Mi még köztük a különbség? Melyiket érdemes használni? -
modder
aktív tag
cső
egyébként multiple="multiple" legyen az (x)html kódban, mert az a szabvány nem támogatja az érték nélküli attirbútumokat, szóval nem köteles minden böngészőben működni ...ásszem
[ Szerkesztve ]
-
SaNyEe
aktív tag
Sziasztok,
Problémám akadt glassfish környezetben.
JSP + Servlet technikát alkalmazok.
JSP:
<select name="car_makes" multiple>
<option value="1">egyik</option>
<option value="2">masik</option>
<option value="3">harmadik</option>
</select>Servlet:
System.out.println("Gyártók: "+request.getParameter("car_makes");
Csak az első bejelölt opciót adja vissza mint azt a getParameter() metódusnév sugallja is.
Hogy lehet ezt a jellegű multiple select problémát feloldani?[ Szerkesztve ]
-
n00n
őstag
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.
-
TBG
senior tag
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...
[ Szerkesztve ]
-
n00n
őstag
válasz
WonderCSabo #3350 üzenetére
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." -
n00n
őstag
válasz
WonderCSabo #3348 üzenetére
A gyenge angoltudásommal feltettem, kíváncsi vagyok valaki megmondja-e mi nem stimmel.
-
-
n00n
őstag
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);
}
}
} -
n00n
őstag
válasz
WonderCSabo #3340 üzenetére
Nem. Legalábbis úgy tűnik.
-
n00n
őstag
válasz
WonderCSabo #3330 üzenetére
És az miét lehet, hogy másoltatok vele egy 3GB-s fájlt és kb 2.4 GB-nél éri el a 100%-ot a progressBar és utána 0%-ra ugrik a maradék másolásáig. Miért?
-
n00n
őstag
válasz
WonderCSabo #3337 üzenetére
Köszönöm. Gondoltam, hogy valami ilyesmi. Elnézést a sok lammer kérdésért.
-
n00n
őstag
válasz
WonderCSabo #3335 üzenetére
Köszönöm. Szóval nem lehet, csak ha sajátot csinálok. És akkor legalább átnevezhetem Mégsére?
-
WonderCSabo
félisten
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?");
[ Szerkesztve ]
-
n00n
őstag
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.
[ Szerkesztve ]
-
n00n
őstag
válasz
WonderCSabo #3330 üzenetére
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;
-
TBG
senior tag
+1
-
MrSealRD
veterán
Hát ez jó kérdés...igazából én annotáció párti vagyok. Elvileg azért találták ki az xml helyett/mellett mert időnként az xml képes volt elszabadulni és egy nagy kupac nehezen áttekinthető maszlag volt.
Az annotációk meg ott vannak az osztályok "felett"...szerintem átláthatóbb. Ez egy jogos és hasznos fejlesztés volt.
-
n00n
őstag
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); -
tvamos
nagyúr
válasz
WonderCSabo #3316 üzenetére
Hat igen, ha egyedul visszel egy projektet, ez nem gond...
-
TBG
senior tag
válasz
Peter Kiss #3321 üzenetére
Igen. Max. a terminológia más
Amit én fejlesztek egy cégen belül alkalmazást, az nem API, a Spring az API és Framework.
[ Szerkesztve ]
-
TBG
senior tag
válasz
WonderCSabo #3319 üzenetére
Igazad van. Kompromisszum. Saját rendszerben több és kevesebb szabadsága van az embernek, mintha API-t fejleszt.
-
WonderCSabo
félisten
Sztem meg kell találni a kompromisszumot az enkapszuláció stb. megvédése és a józan kód között. Például sztem az ocsmány, ha az összes elem hozzáadására nem biztosítasz fv-t, hanem a hívóra hagyod azt, csomó kód duplikációt stb eredményezve, pedig ezt gyakori feladatot az adott osztálynak kéne biztosítania.
-
TBG
senior tag
válasz
WonderCSabo #3316 üzenetére
mert értelmesen hívogattam a metódust
Igen, Te értelmesen hívod, de láttam egy csomó API-t, ahol vannak ilyen aknák és egyesek bizony rá is lépnek.
-
TBG
senior tag
Az egész koncepció szerintem téves. Alapból a Car osztály Tyres collectionjához semmilyen módon nem kellene biztosítani hozzáférést. addTye(Tyre t), removeTyre(Tyre t), stb. metódusokon keresztül kellene csak engedni az elérést, különben az eredeti problémához hasonló eredmények születnek....én kapásból a setTyres(List<Tyre> tires) metódust nem is implementálnám...
[ Szerkesztve ]
-
Peter Kiss
őstag
válasz
WonderCSabo #3312 üzenetére
Persze, önmagában a kereket lehet, de a teljes collection-t nem, ez a fontos.
-
WonderCSabo
félisten
válasz
Peter Kiss #3311 üzenetére
Már hogy ne lehetne?
public void setTires(List<Tyre> t) {
this.tires.clear();
this.tires.addAll(t);
}Meghívod így:
List<Tyre> l = new ArrayList<>();
l.add(new Tyre(10));
car.setTires(l);
l.get(0).changeTyre(); // ez a fv. megváltoztatja az Tyre-t valamilyen módon
// a Car-ben ugyanerre van referencia, tehát abban lévő is megváltozik[ Szerkesztve ]
-
Peter Kiss
őstag
válasz
WonderCSabo #3310 üzenetére
Kívülről nem lehet, csak a Car-on keresztül, és itt ez a lényeg.
-
WonderCSabo
félisten
válasz
Peter Kiss #3309 üzenetére
Így is lehet kívülről változtatni, csak nem az egész listát egyben, hanem kerekenként.
[ Szerkesztve ]
-
Peter Kiss
őstag
válasz
WonderCSabo #3304 üzenetére
Ha csak a referenciát állítja át, akkor a kerekek listáját kívülről is lehetne változtatni, az pedig biztosan nem jó.
-
Lacces
őstag
Kérdésedre válaszolva ezt a minta feladatot láttam valahol mint java-s teszt. Először elméletben találtam mellé, aztán megnéztem Eclipse alatt, de nem értettem, hogy miért keletkezik a hiba.
Annyit PHP-ztam az elmúlt időszakban a munka miatt, hogy kopik a Java tudásom... úgyhogy vizsgák után egyből akarok gyakorolni, meg hát voltam közben életem első Java-s interjú tesztjén...
Mondjuk úgy, hogy a vereség arra ösztökél, hogy jobb legyek... :/Ha magam kellett volna, hogy programozam, akkor nem így csináltam volna természetesen
[ Szerkesztve ]
-
TBG
senior tag
-
TBG
senior tag
válasz
WonderCSabo #3304 üzenetére
Nem tudjuk, hogy mit akart.
-
TBG
senior tag
válasz
WonderCSabo #3302 üzenetére
Nem lett volna rossz az eredeti megoldás, ha a kerekeket nem ugyanabból a Car példányból veszi
-
WonderCSabo
félisten
Nyilván szeretett volna egy olyan metódust, ami egyszerre az összes kereket lecseréli. A setTires nevéből is ítélve én ezt így csináltam volna:
public class Car {
private List<Tyre> tires = new ArrayList<Tyre>();
public void setTires(List<Tyre> t) {
this.tires = t;
}
// Egyéb lekérdező metódusok
} -
TBG
senior tag
Az egészet nem értem egyébként.
Car car = new Car();
car.addTire(new Tyre(10));
car.addTire(new Tyre(11));Ez a 3 sor megcsinálja azt, amit itt szeretnél tenni...
List<Tyre> carTires = car.getTires();
System.out.println("Before: " + carTires.size());
car.setTires(carTires);Gondolom, azt vártad, hogy lesz egy 4 elemű listád [10,11,10,11] értékekkel? Vagy mi volt az elképzelés?
Egyébként így működött volna:public class Car {
private List<Tyre> tires = new ArrayList<Tyre>();
public void setTires(List<Tyre> t) {
this.tires.clear();
this.tires.addAll(t);
}
// Egyéb lekérdező metódusok
}
public class CarTest {
public static void main(String[] args) {
Car car = new Car();
car.addTire(new Tyre(10));
car.addTire(new Tyre(11));
List<Tyre> carTires = car.getTires();
System.out.println("Before: " + carTires.size());
Car anotherCar = new Car();
anotherCar.setTires(carTires);
System.out.println("After (1): " + car.getTires().size());
System.out.println("After (2): " + anotherCarTires.size());
}[ Szerkesztve ]
Új hozzászólás Aktív témák
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))