- DIGI Mobil
- Android alkalmazások - szoftver kibeszélő topik
- Netfone
- OnePlus 7 - magabiztos folytatás
- iPhone topik
- Amazfit GTS 4 - divatos megjelenés
- Milyen okostelefont vegyek?
- Digitális detox a Nokiától
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Google Pixel 8 Pro - mestersége(s) az intelligencia
Hirdetés
-
Lenovo Essential Wireless Combo
lo Lehet-e egy billentyűzet karcsú, elegáns és különleges? A Lenovo bebizonyította, hogy igen, de bosszantó is :)
-
Ilyen lesz az Astor: Blade of the Monolith
gp A C2 Game Studio nemrég átnevezett játéka a tervek szerint jövő hónap végén debütál.
-
Már a Sparkle is jegyezhet fehérbe öltöztetett videokártyákat
ph A gyártó egy 8 és egy 16 GB-os, inteles modellel jelentkezett, amiket ránézésre nem igazán tudnánk megkülönböztetni egymástól.
Új hozzászólás Aktív témák
-
n00n
őstag
Sziasztok!
Elkezdtem Java nyelvvel foglalkozni, van is két könyvem, aminek lassan a végére érek. Szeretnék gyakorolgatni, de valami komolyabb példával. Próbáltam keresni valami olyan tutorialt, ahol lépésről-lépésre írnak egy nagyobb programot, mert szerintem abból lehet igazán tanulni. De sajnos nem jártam eredménnyel. Valakinek esetleg nincs a tarsolyában ilyesmi? Angol nyelv nem probléma. Ha nincs, akkor pedig mondjatok már valami ötletet, hogy milyen programot lenne hasznos megírni egy kezdőnek. Nem szeretem az ilyen cicás-kutyás fantázia dolgokat, szeretem, ha a gyakorlás közelebb áll a valós dolgokhoz.
-
n00n
őstag
Sziasztok!
NetBeanshez van olyan plugin (biztos van, arra vagyok inkább kíváncsi, hogy melyik érdemes használni), amivel grafikus felületen lehet összedobálni az írt alkalmazás GUI-ját?
-
n00n
őstag
Sziasztok!
NetBeans 7.2 alatt tevékenykedem. Elkészítettem egy csomagot (funkciok) benne a Funkciok osztállyal, majd egy funkciokgui csomagot, benne a FunkciokGUI osztállyal. Értelemszerűen a második csomagban van a NetBeansben összerakott grafikus felület. Viszont futtatáskor csak a funkciok fut le, a gui nem indul el. Valahogy össze kell kötni?
-
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");
}
} -
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?
-
n00n
őstag
Sziasztok!
Kellene egy kis segítség.
Adott az alábbi kód:
private void fajlbolBeolvas(InputStream fajl) {
Scanner fajlScanner = new Scanner(fajl, "UTF-8");
String sor;
while (fajlScanner.hasNextLine()) {
sor = fajlScanner.nextLine();
}
}Egy fájlból kiolvasok adatokat, és azokat soronként belerakom a sor változóba. Viszont egy sor így néz ki:
Személy neve;1987
Magyarán ott még ketté kellene választanom a ";" jel mentén. Erre van valami ötlet?
-
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); -
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;
-
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 #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?
-
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 #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 #3340 üzenetére
Nem. Legalábbis úgy tűnik.
-
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 #3348 üzenetére
A gyenge angoltudásommal feltettem, kíváncsi vagyok valaki megmondja-e mi nem stimmel.
-
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
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.
-
n00n
őstag
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?
-
n00n
őstag
válasz Superhun #4068 üzenetére
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.
-
n00n
őstag
válasz Superhun #4088 üzenetére
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.
[ Szerkesztve ]
-
n00n
őstag
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.
[ Szerkesztve ]
-
n00n
őstag
Valamiért itt megakad a program és nem tudom, hogy miért:
String szazalek = "" + atmasoltFajlok / (szamlalo / 100);
Ötlet? Windowson gépen megy, majd felrakom Linuxos szerverre és ott nem. Ha átírom a szazalek változót 5-re, akkor jó.
-
n00n
őstag
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...
[ Szerkesztve ]
-
n00n
őstag
Megnéztem, rendszer szinten se másol gyorsabban, akkor valószínű én vagyok csak telhetetlen
Viszont jól számolom a progress bar-hoz a százalékot?
atmasoltFajlok / (osszesFajl / 100) ?
És ezt hogyan tudnám ábrázolni egy progress baron ami int értéket fogad csak el?
[ Szerkesztve ]
-
n00n
őstag
Másoláskor mekkora bufferrel érdemes dolgozni?
byte[] buffer = new byte[1024];
Ha egy megával dolgozok, akkor folyamatos a sebesség, viszont lassú. Ha 4-el, akkor az eleje gyors a vége sokkal lassabb, mint az egy megánál. 16-nál még inkább.
-
n00n
őstag
Köszi a válaszokat.
Más: Meg kellene oldani, hogy a program felcsatoljon, majd le egy pendrive-ot Linux alatt. Próbáltam közvetlen a Java-ból a Linuxos mount és umount paranccsal, de nem mindig jött össze és egy pendrive bánta azóta. Ötlet?
-
n00n
őstag
válasz PandaMonium #4138 üzenetére
De. Mert úgy lett lehúzva, hogy nem lett rendesen unmount-olva.
@TBG: Igen, GUI-val. De ez egy szerver, ott nincs automount.
-
n00n
őstag
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();[ Szerkesztve ]
-
n00n
őstag
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.
-
n00n
őstag
Sziasztok!
Van egy nem túl bonyolult kb 1000 sorból álló Java programom. Van itt olyan akinek, ha elküldöm privátban átnézné, hogy min lehetne javítani rajta? Persze honorálom is cserébe valamivel, ha úgy gondolja.
-
n00n
őstag
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?
-
n00n
őstag
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?
[ Szerkesztve ]
Új hozzászólás Aktív témák
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- OLED TV topic
- Tőzsde és gazdaság
- Automata kávégépek
- DIGI Mobil
- HiFi műszaki szemmel - sztereó hangrendszerek
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- Android alkalmazások - szoftver kibeszélő topik
- Motoros topic
- exHWSW - Értünk mindenhez IS
- Kínai, és egyéb olcsó órák topikja
- További aktív témák...