Új hozzászólás Aktív témák
-
kispx
addikt
válasz haxiboy #3002 üzenetére
Tehát akkor mellékeljük 10X a dll-eket 10 db program esetén? Nem fog egy kicsit sokat foglalni? (Megjegyzem, senki sem fog gondoskodni azok a dll-ek frissességéről és hibamentességéről). Ennyi erővel a telepítőbe is bele lehet a jre-t rakni. (És így csak 1X lesz felrakva)
"esetleg ha nincs net a gépén mit csinál?"
Ez az esetek hány százaléka? Tudatába, hogy a jre telepítője milyen nagy számmal dicsekszik, hogy annyi készüléken van már rajta. A maradék 0,000001%-ban ha már a dll-eket mellékelni tudja a fejlesztő a programjához, akkor már egy jre-t is tud.[ Szerkesztve ]
-
n00n
őstag
Szeretnék írni egy fájlmásolást progress barral, viszont nem jön össze. Mikor meghívom a lent látható fileMasolas metódust szépen megjelenik a JGrame, viszont a belseje "átlátszó" és csak azután jelenik meg, hogy végzett az utána következő fájl másolással. Valakinek ötlet, hogy mi nem jó?
private void fileMasolas() {
JFrame frame = new JFrame("Mentés másolása folyamatban");
pb = new JProgressBar(0, 100);
pb.setValue(0);
pb.setStringPainted(true);
JPanel panel = new JPanel();
panel.add(pb);
panel.setBorder(BorderFactory.createEmptyBorder(40, 75, 40, 75));
frame.setContentPane(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
File filein = new File("D:/adat.db");
File fileout = new File("D:/adat_new.db");
FileInputStream fin = null;
FileOutputStream fout = null;
long length = filein.length();
long counter = 0;
int r = 0;
byte[] b = new byte[1024];
try {
fin = new FileInputStream(filein);
fout = new FileOutputStream(fileout);
while ((r = fin.read(b)) != -1) {
counter += r;
int bar = (int) (100.0 * counter / length);
pb.setValue(bar);
fout.write(b, 0, r);
}
} catch (Exception e) {
System.out.println("Hiba");
}
} -
Karma
félisten
Egyszerű, az átlátszó ablak miatt adnia kéne magát. A probléma az, hogy a UI szálban végzel blokkoló IO műveletet, ezért amíg a másolás tart, nem tudja frissíteni a frame-et.
A legegyszerűbb, Java 6 és előtti megoldáshoz külön szálat kéne indítanod, amiben ezt a másolást végzed, és periodikusan visszajelzel a progressről a UI szálnak - ami frissíti a progressbart.
Java 7 alatt már van AsynchronousFileChannel ilyesmihez, de nem ismerem (hatosnál leragadtam).
[ Szerkesztve ]
“All nothings are not equal.”
-
Davs
tag
Java concurrency . Az elso link jonak tunik, az a hivatalos dokumentacio (ha jo angolul)
Amugy minden GUI-nal ugy van, hogy azon a szalon, ahol a JFrameket stb- t csinalod nem szabad komolyabb, sokaig tarto dolgokat csinalni, mert az igy leblokkolja a GUI-t (ami igy nem tudja ellenorizni, hogy tortent-e uj Event -billentyulenyomas, egerklikk, progressbar changge- stb.
[ Szerkesztve ]
-
n00n
őstag
Ismét kellene egy kis segítség:
Adott kettő class közös package-ben:
programGUI és fileMasolas
programGUI.java ködrészlete:
//Progress bar:
JDialog copyModalDialog = new JDialog();
copyModalDialog.setTitle("Mentés másolása folyamatban");
pb = new JProgressBar(0, 100);
pb.setValue(0);
pb.setStringPainted(true);
JPanel panel = new JPanel();
panel.add(pb);
panel.setBorder(BorderFactory.createEmptyBorder(40, 75, 40, 75));
copyModalDialog.setContentPane(panel);
copyModalDialog.setResizable(false);
copyModalDialog.setModal(true);
copyModalDialog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
copyModalDialog.pack();
copyModalDialog.setLocationRelativeTo(null);
//fájlmásolás szál indítása:
fileMasolas tMasolas = new fileMasolas();
tMasolas.start();
//progress ablak megjelenítése:
copyModalDialog.setVisible(true);fileMasolas.java kód:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package proba;
import java.io.*;
class fileMasolas extends Thread {
public fileMasolas() {
}
public void run() {
File filein = new File("D:/adat.db");
File fileout = new File("D:/adat_new.db");
FileInputStream fin = null;
FileOutputStream fout = null;
long length = filein.length();
long counter = 0;
int r = 0;
byte[] b = new byte[100];
try {
fin = new FileInputStream(filein);
fout = new FileOutputStream(fileout);
while ((r = fin.read(b)) != -1) {
counter += r;
int bar = (int) (100.0 * counter / length);
MentesKeszitoGUI.pb.setValue(bar);
fout.write(b, 0, r);
}
} catch (Exception e) {
System.out.println("Hiba");
}
}
}A kérdés, ha végzett a run() metódus, hogyan tudom ezt a szálat leállítani és visszaadni a másiknak a vezérlést. Vagyis eltüntetni a copyModalDialog-ot?
-
Karma
félisten
Huh, erős kód. Meg egy kicsit erjedt is. Ha már egyszer a progressbar értékét is másik szálból közvetlenül babrálod a setValue-val, miért nem hívod meg a dialógus setVisible-jét amikor vége?
Félreértéseket elkerülendő, ez így nagyon-nagyon nem jó megoldás, de legalább begipszelnéd a lyukat
A probléma ugyanis az, hogy a Swing (meg úgy egyébként a legtöbb UI framework) nem szereti azt, ha a UI szálon kívül (itt event dispatcher threadnek hívják) bármit módosítasz. Jobb helyeken egy hatalmas exceptiont kapsz a nyakadba, itt úgy tűnik nem.
A dialógus elindítása még rendben van, a másik szálból nem szabadna közvetlenül hívogatni a setValue-t.
Fontos megjegyezni, mert ahogy látom itt félreértés van: az új szál indításával a vezérlés két, párhuzamosan futó részre szakadt. Ez a mondatod: A kérdés, ha végzett a run() metódus, hogyan tudom ezt a szálat leállítani és visszaadni a másiknak a vezérlést." értelmetlen, az indító dialógusos kód nem vesztette el a szálát, egyszerűen visszatért az eseményekre várakozó állapotba. Ezt végzi is, csak a modális dialógus miatt nem törődik máshova irányuló kattintásokkal és billentyűleütésekkel.
Magára a problémára visszatérve, egy kicsit szerteágazik a megoldás, mert olyan alap dolgokkal kellene tisztában lenned, mint a UI (dialógus, progressbar helyzete) elválasztása az üzleti logikától (fájlmásolás száz bájtonként). Kéne egy rendes Listener interfész, amit a másoló hívogat (ezen keresztül jelentve a százalékos állást, számként), és a programGUI-d implementálja.
Ehhez az implementációhoz meg a SwingUtilities.InvokeLater-t kéne használnod, hogy a dispatcher szálon fusson le a tényleges progress bar frissítés, meg a dialógus elrejtése.
Így nem függene a másolód attól, hogy a UI-on milyen komponensek vannak és hogy hívják őket, csak a dolgát végezné
“All nothings are not equal.”
-
Frigo
őstag
SwingWorker lesz ami neked kell. Itt egy példa Progressbar-ral
-
Davs
tag
Hali!
A kovetkezo dologra szeretnek rakerdezni:PetCreator:
public abstract class PetCreator {
public abstract List<Class<? extends Pet>> types();
}ForNameCreator:
public class ForNameCreator extends PetCreator {
private static List<Class<? extends Pet>> types =
new ArrayList<Class<? extends Pet>>();
}A PetCreatorban a types() egy abstract metodus, nem? Akkor hogy lehet, hogy a ForNameCreator-ban mint sima field szerepel?
-
Davs
tag
PetCreator:
//: typeinfo/pets/PetCreator.java
// Creates random sequences of Pets.
package typeinfo.pets;
406
Thinking in Java
Bruce Eckel
import java.util.*;
public abstract class PetCreator {
private Random rand = new Random(47);
// The List of the different types of Pet to create:
public abstract List<Class<? extends Pet>> types();
public Pet randomPet() { // Create one random Pet
int n = rand.nextInt(types().size());
try {
return types().get(n).newInstance();
} catch(InstantiationException e) {
throw new RuntimeException(e);
} catch(IllegalAccessException e) {
throw new RuntimeException(e);
}
}
public Pet[] createArray(int size) {
Pet[] result = new Pet[size];
for(int i = 0; i < size; i++)
result[i] = randomPet();
return result;
}
public ArrayList<Pet> arrayList(int size) {
ArrayList<Pet> result = new ArrayList<Pet>();
Collections.addAll(result, createArray(size));
return result;
}
} ///:~ForNameCreator:
//: typeinfo/pets/ForNameCreator.java
package typeinfo.pets;
import java.util.*;
public class ForNameCreator extends PetCreator {
private static List<Class<? extends Pet>> types =
new ArrayList<Class<? extends Pet>>();
// Types that you want to be randomly created:
private static String[] typeNames = {
"typeinfo.pets.Mutt",
"typeinfo.pets.Pug",
"typeinfo.pets.EgyptianMau",
"typeinfo.pets.Manx",
"typeinfo.pets.Cymric",
Type Information
407
"typeinfo.pets.Rat",
"typeinfo.pets.Mouse",
"typeinfo.pets.Hamster"
};
@SuppressWarnings("unchecked")
private static void loader() {
try {
for(String name : typeNames)
types.add(
(Class<? extends Pet>)Class.forName(name));
} catch(ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
static { loader(); }
public List<Class<? extends Pet>> types() {return types;}
} ///:~ -
Lacces
őstag
Tényleg, itt mi a hiba? a static kulcsszó hiánya?
Most nincs semmilyen java előttem, és így fejben keresek megoldást.hunfatal: úgy tűnik, hogy a java 1.5-től elérhetőek az annotációk. (Az override az pedig annotáció...)
Java annotation - wikipedia[ Szerkesztve ]
-
lakisoft
veterán
Sziasztok,
Valaki nekem meg tudná mondani miért jó J2EE-ben használni az Annotations-t?
Előre is köszi. -
modder
aktív tag
válasz lakisoft #3025 üzenetére
Az annotációk elég sok mindenre használatosak.
Nem tudom konkrétan melyik annotációra gondolsz, és azt sem tudom hirtelen, hogy a Java 2 EE mennyire használja őket. Volt egy névváltás javában, nagyon sokan még mindig J2EE-ként hivatkoznak rá, de Java 1.4-től fölfelé Java EE 5 és Java EE 6-nak nevezik őket, amik sokkal inkább használják a különféle annotációkat.
http://en.wikipedia.org/wiki/Java_EE_version_history
Az annotációk az egyfajta "convention over configuration" paradigma. Amit korábbi java verziókban konfigurációs fájlokban kellett megadni, most a forráskódba írható a definíció helyén. Persze a régi konfigurációs fájlban lévő beállítások precedencia előnyt élveznek az annotációkkal szemben. A haszon az egészben az, hogy sokkal kisebb erőfeszítésbe telik a fejlesztő számára, ha csak a forráskódot kell böngésznie, mint ha a forráskódot és mellé a konfigurációs fájlt is figyelemmel kell kísérni.
Például ott vannak az EJB-k. Régen a beans.xml-ben kellett definiálni minden osztályra, hogy az EJB-e vagy sem, definiálni kellett hozzá a remote és local interfészt, a bean nevét, egyebet. Ha van 10 EJB-d, és változik a neve az egyiknek, nem túl kényelmes külön a konfigurációs fájlban is böngészni utána, pláne, lehet, hogy egy kezdő programozónak eszébe sem jut.
A java EE-nek csomó olyan szolgáltatása van, amiket csak konfigurációs fájlokkal vagy annotációkkal lehet csak elérni. Pl EJB-k létrehozása, JPA Entity beanek, ManagedBean-ek, Servletek, Servlet filterek. egy nagy program esetén ez hatalmas konfigurációs fájlokat eredményezhet, amiket aztán külön kell karbantartani, hogy a kóddal konzisztens maradjon. Az annotációkkal azonban a kóddal együtt lehet kezelni.
Kb ennyi
-
Lacces
őstag
válasz lakisoft #3027 üzenetére
Hali!
Az lenne a kérdésem, hogy milyen könyvet/online anyagot használsz a tudásod elmélyítéséhez?
Többieknek:
Kellene egy kis segítség definiáció értelemzésében.
Mit jelentnek a következő kifejezések, nekem nem tiszta"változtatható objektum", "végleges objektum", "végleges mező", én igazából itt a final kulcsszóra gondoltam, de nem vagyok benne biztos.
[ Szerkesztve ]
-
wmati
addikt
Tudom amatör kérdés de .java kiterjesztésű filet hogy tudok lefuttatni?
-
Lacces
őstag
Nem tudsz, le kell fordítani .class kiterjesztésűre. És ezt a .class fájlt tudod futattni.
Fordításhoz a javac-ot használd, beírod parancssorba például: javac xy.java
Javac-hoz kell a Java SDK, hogy a gépeden legyen.videó a használatról.
Esetleg használj valamilyen IDE-t (NetBeans, Eclipse)
-
Lacces
őstag
bővebben?
Ha megy az angol: itt egy rövid leírás a javac-ról.
Vagy ez magyar a jegyzet 9. oldalától a 11.oldalig olvasd el (a pdf lapon lévő oldalszámok alapján)
[ Szerkesztve ]
-
pakriksz
őstag
baze hát kikészít az android fejlesztés.
Van az audiomanagernek egy ilyen metódusa hogy registerMediaButtonEventReceiver. Na most erre ráguglizok, és 5000 helyen mindig ugyan az jön ki, hogy ComponentName objektum a paramétere... Csakhogy "The method registerMediaButtonEventReceiver(ComponentName) is undefined for the type AudioManager"
Troll (nemhivatalos definíció): az akinek véleménye nem tetszik nekünk/nem értünk vele egyet. (10-ből 9 fanboy ezt ajánlja) || Fanboy 8 in 1 (Intel, AMD, Nvidia, konzol, PC,+minden politikai oldal) hiszen "ahol nem mi vagyunk, ott az ellenség"
-
pakriksz
őstag
válasz pakriksz #3043 üzenetére
ja hát persze ilyen nincs is csak api level 8-tól... áááá
[ Szerkesztve ]
Troll (nemhivatalos definíció): az akinek véleménye nem tetszik nekünk/nem értünk vele egyet. (10-ből 9 fanboy ezt ajánlja) || Fanboy 8 in 1 (Intel, AMD, Nvidia, konzol, PC,+minden politikai oldal) hiszen "ahol nem mi vagyunk, ott az ellenség"
-
bads1
aktív tag
Hali, állandóan felugrál gépindulásnál a java updater és rohadtul idegesít, kell ez egyáltalán nekem valamire vagy leszedhetem? Már nem emlékszem hogyan került a gépre .
-
kispx
addikt
-
Q-Q-RI-Q
csendes tag
Sziasztok
Segítséget szeretnék kérni. Kaptam egy Huwei S7 Slim tabletet. Kedvenc online sakk játékommal szeretnék rajta játszani (flyordie) A belépéshez java telepítést kér a rendszer. Sajnos androidra sehol sem találok ilyen lehetőséget.
Nagyon megköszönném ,ha tudna valaki segíteni ez ügyben.
Köszi ..hali -
Davs
tag
Hi!
Elkezdtem olvasgatni a concurrency temarol es lenne egy kerdesem. Sokszor van emlite a szovegben a single processor - multiple processor dolog. Egy ketmagos proci most akkor melyik csoportba tartozik? A ket mag tekintheto ket kulonallo processzornak?
Új hozzászólás Aktív témák
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- 5.1, 7.1 és gamer fejhallgatók
- Vicces képek
- Hogy is néznek ki a gépeink?
- Processzorra való vizesblokk az ASUS ROG-os portfóliójában
- Gyúrósok ide!
- Honor Magic5 Pro - kamerák bűvöletében
- Anglia - élmények, tapasztalatok
- Háztartási gépek
- TCL LCD és LED TV-k
- Május 7-én lesz az új iPadek bemutatója
- További aktív témák...
- XBOX ONE/PS4/PS5/XBOX SERIES/NINTENDO SWITCH konzolt vásárolnék!
- XBOX SERIES/PS4/PS5/XBOX ONE/NINTENDO SWITCH konzolt vásárolnék!
- PS5/PS4/XBOX ONE/XBOX SERIES/NINTENDO SWITCH konzolt vásárolnék!
- Új Dobozos Lenovo Ideapad Flex 5 x360 Érintős Ultrabook Óriás Tab 16" -40% Ryzen 5 5500U 16/512 QHD
- PS4/PS5/XBOX ONE/XBOX SERIES/NINTENDO SWITCH konzolt vásárolnék!