Byla vydána nová stabilní verze 8.2 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 152. Přehled novinek i s náhledy v příspěvku na blogu.
Byla vydána nová stabilní verze 4.0 svobodného multiplatformního softwaru pro editování a nahrávání zvukových souborů Audacity (Wikipedie). S rozhraním přepsaným do Qt. Přehled novinek také na YouTube. Ke stažení je oficiální AppImage. Zatím starší verze Audacity lze instalovat také z Flathubu a Snapcraftu.
NVIDIA kupuje Hugging Face za 12,93 miliardy dolarů.
Předobjednat si lze nový jednodeskový počítač Arduino VENTUNO Q s předinstalovaným Ubuntu. S 16 GB LPDDR5 a 64 GB eMMC. Pro lokální LLM, agentní AI, počítačové vidění, robotiku…
Hexpair není nejlepší HEX editor na světě a ani se o to nesnaží. Zato je k dispozici kdykoliv a kdekoliv – všude tam, kde máte svůj Vim. Vznikl jako hobby projekt před pár měsíci a dospěl do stavu, kdy by mohl být užitečný širší komunitě. Přepnout do HEX režimu se dá i uprostřed rozdělané práce: Soubor, který už máte otevřený běžným vim file.md, jedním příkazem přepnete do HEX editoru a dalším příkazem ho můžete vrátit zpět do textu. Kurzor přitom
CERN dlouhodobě používal vlastní sestavení RHEL, ze kterého přešel na CentOS Stream. Federico Vaga a Nikos Tsipinakis ale nyní v přednášce na MiniDebConf Winterthur 2026 popisují plán probíhajícího přechodu na Debian pro řízení akcelerátorů. Důvodem k opuštění CentOS Stream jsou zachování zpětné kompatibility se starším hardwarem, kterou Red Hat narušuje, když tlačí sestavení balíčků pro novější verze architektury (x86-64), a nedostatečné nástroje pro sestavování vlastních balíčků a repozitářů.
UZDoom (Wikipedie), tj. fork GZDoom, byl vydán ve verzi 5.0.0. Videopředstavení na YouTube. Podrobný přehled novinek v Changelogu.
Příručka Linux From Scratch pro sestavení základního linuxového systému byla aktualizována v pravidelném půlročním termínu. Vydání 13.1 shrnuje přes 40 nových verzí balíčků a několik patchů. Navazující příručka Beyond Linux From Scratch s recepty pro sestavení dalších knihoven a aplikací zatím vydána nebyla, ačkoliv vývojová verze stále dostává aktualizace. Lze je číst online nebo stáhnout v HTML či PDF.
Národní bezpečnostní tým CSIRT.CZ koordinovaný sdružením CZ.NIC přichází se službou Strážci internetu, která má sjednotit způsob hlášení doménových jmen zneužívaných k páchání trestné činnosti. Službu mohou uživatelé využívat také prostřednictvím rozšíření do prohlížeče. Nový nástroj podporuje jak hlášení vyžadující autorizaci, tak anonymní reporting, u kterého však nebude možné zapojit takovou míru automatizace jako u
… více »Firefox pro iOS přichází s integrovaným blokováním reklam. Funkce je ve výchozím nastavení vypnutá a lze ji aktivovat v Settings > Browsing > Ad Blocker.
Dobry den, ucim se pracovat s tridou Java SwingWorker. Pokud tuto tridu pouziji timto zpusobem, je vse ok, vse chapu.
private Document doc;
...
JButton button = new JButton("Open XML");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
SwingWorker Document, Void worker =
new SwingWorker Document, Void () {
public Document doInBackground() {
Document intDoc = loadXML();
return intDoc;
}
public void done() {
doc = get();
}
};
worker.execute();
}
});
Co vsak nevim, je jak to udelat, pokud si chci vytvorit vlastni tridu v samostatnem souboru:
public class SwingWorkerChild extends SwingWorker
Tak jak potom mohu ziskat vyslednou hodnotu bez zamrznuti GUI? Pokud bych v event dispatch thread zavolal neco takoveho
SwingWorker swingWorker = new SwingWorkerChild(); swingWorker.execute(); String result = swingWorker.get();
Tak GUI zamrzne, protoze v okamziku volani metody get() neni hodnota jeste pripravena.
Ja bych prave potreboval tu vyslednou hodnotu vratit jako String, nebo alespon zmenit text na komponente JLabel, jenze k ni nemam ze tridy SwingWorkerChild pristup.
Doufam, ze jsem to vysvetlit srozumitelne co potrebuji, budu rad za jakekoliv navrhy, dekuji.
done().
Mám li například worker, který vrací složitě sestavovaný XML a který předpokládám použít mohokrát v různých třídách, kloním se jednoznačně k počkání na výsledek.To já také. Ale časovač není počkání na výsledek, ale opakované dotazování – dalo by se říci i otravování
– „už je výsledek hotov?“ Navíc tím budete stále blokovat AWT vlákno (i když nastavíte pro get() nějaký krátký čas), nebo kvůli tomu musíte zase vytvářet nové vlákno. Oním „čekáním“ pak strávíte zbytečně moc času – jak při programování, tak při samotném běhu programu.
Pokud se bude výsledek používat v mnoha třídách, vytvořil bych si k tomu interface pro posluchače událostí, a SwingWorker by v metodě done() pouze vyvolal příslušnou událost oznamující dokončení práce.
Otravování může zároveň kontrolovat průběh akce viz getProgressTo je lepší udělat tak, že se vytvoří posluchač, který naslouchá změně property
progress.
Nechapu kde je problem. Kdyz se pouzije SwingWorkerChild na miste puvodniho pouziti anonymni tridy tak se stane co?
done() „vědět“, kdy práce skončila. Takže pokud chcete uživatele informovat o tom, že probíhá nějaká akce a chcete mu umožnit ji např. přerušit, ještě před zavoláním execute() vytvoříte dialogové okno, kde bude nějaký nápis o tom, co právě probíhá, a tlačítko k přerušení. V metodě done() pak vypíšete výsledek zpracování a onen dialog uzavřete. Samozřejmě není nutné zobrazovat dialog, stačí třeba přesýpací hodiny (pak ale uživatel nemá možnost akci přerušit), nebo – pokud na dokončení nic jiného nezávisí – můžete nechat akci probíhat jen na pozadí a na konci třeba jen vypsat zprávu do stavového řádku. Ale pokud chcete získat výsledek, měl byste jej získávat právě v metodě done() nebo v kódu, který je touto metodou vyvolán. Případně také můžete použít blokující get(), který čeká jen určitou dobu – ale ani ten byste neměl volat z AWT vlákna.
Jinak v dokumentaci SwingWorkeru je použití myslím docela dobře popsáno.
Dekuji sice za vysvetleni, ale to co jste napsal je mi zname, dokumentaci jsem studoval i jsem studoval SwingWorker examples ruzne na internetu a VSUDE, kde vytvareli tridu ktera dedi od SwingWorker, tak ji meli jako vnitrni tridu te hlavni GUI tridy - tak to funguje, vse ok. Mne jde o to - kvuli prehlednosti - umistit tu tridu ktera dedi od SwingWorker do samostatneho souboru. Pak jiz nemuzu v jeji metode done() jednoduse zavolat neco takoveho:
promenna_GUI_tridy = get();
Chapu to tedy dobre, ze v tomto pripade je konvenci pouzit vnitrni tridy, abych prave zamezil tomuto problemu?
To prvni reseni jsem tedy zkusil implementovat nejak takto:
GUI trida:
public class SwingWorkerTest extends javax.swing.JFrame {
protected String result;
public void setResult(String result)
{
this.result = result;
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
{
SwingWorker swingWorker = new SwingWorkerChild(this);
swingWorker.execute();
jLabel1.setText(result);
}
...
}
SwingWorker trida:
public class SwingWorkerChild extends SwingWorker String, Void
{
protected String result;
protected SwingWorkerTest GUIClass;
public SwingWorkerChild(SwingWorkerTest GUIClass)
{
this.GUIClass = GUIClass;
}
@Override
public String doInBackground()
{
try
{
Thread.sleep(4000);
} catch (InterruptedException ex)
{
ex.printStackTrace();
}
return "Hello" + " " + "there!";
}
@Override
public void done() {
try
{
GUIClass.setResult(get());
//System.out.println("Result = "+result);
} catch (InterruptedException ex)
{
ex.printStackTrace();
} catch (ExecutionException ex)
{
ex.printStackTrace();
}
}
}
Jenze jsem narazil na ten samy problem zde:
swingWorker.execute(); jLabel1.setText(result);
V momente kdy chci pouzit promennou result, tak ta jeste neni hotova a do JLable1 se ulozi prazdny text. Resenim by asi bylo z metody done() rovnou menit ten text na jLabel1 - tak jste to myslel?
Chtel bych se zeptat na to treti reseni, mohl byste prosim nacrtnou kostru jak by to pro tento pripad asi vypadalo? Dekuji
jLabel1.setText(result); přesuňte do metody public void setResult(String result).
No jasne, nechapu, ze me to nenapadlo, skoro se az stydim, ze jsem se na to ptal:)
...nebo použijte posluchače událostí – GUI třída bude posluchač a SwingWorker vyvolá příslušnou událost.
Muzete me prosim nasmerovat na nejaky navod/tutorial, kde je tady tento zpusob nejak prehledne popsan?
Nikde jsem ale nenasel, jakou udalost vyvola dokonceni te metody doInBackground(). Jakou udalost mam tedy v naslouchajici tride (GUItrida) odchytavat?
state, a volání setProgress() vyvolá událost o změně property progress. Pokud chcete volat událost při skončení práce, musíte si připravit nějakou událost sám a vyvolat ji v metodě done().
Ano, to jsem si myslel, ale prave jsem nikde nemohl najit zadny ukazkovy priklad, kde se vytvari, spousti a odchytava vlastni udalost - ani v tech odkazech vyse. Mohl byste mi sem prosim napsat kostru jak by to vypadalo nebo alespon odkazat na priklad?
WorkerFinishListener nebo bude mít anonymní nebo vnitřní třídu tohoto typu a zaregistruje si ji do MySwingWorkeru.
public interface WorkerFinishListener<T> {
public void finished(SwingWorker<T> worker);
}
public class MySwingWorker extends SwingWorker<T, V> {
private final List<WorkerFinishListener<T>> finishListeners = new LinkedList<WorkerFinishListener<T>>();
public void addFinishListener(WorkerFinishListener<T> listener) {
finishListeners.add(listener);
}
public void removeFinishListener(WorkerFinishListener<T> listener) {
finishListeners.remove(listener);
}
@Override
public void done() {
for (WorkerFinishListener<T> listener : finishListeners) {
listener.finished(this);
}
}
…
}
class MyForm extends JForm {
public void zacatekCinnosti() {
final MySwingWorker<WorkResult> worker = new MySwingWorker<WorkResult>();
worker.addFinishListener(
new WorkerFinishListener () {
public void finished(worker) {
try {
MyForm.this.setStatus("Hotovo. Výsledek je: "+worker.get().toString());
} catch (ExecutionException ex) {
MyForm.this.setStatus("Došlo k chybě. "+ex.getCause().getLocalizedMessage());
}
}
}
);
worker.execute();
}
…
}
Dekuji, uz jsem se k tomu postupne dopracovaval, ale Vas kod mi hodne pomohl. Mel bych jeste dotaz, proc pisete u definice toho interface i jinde <T> - myslel jsem ze toto se pouziva pouze v dokumentaci. Ani mi to IDE nechtelo vzit, tak jsem <T> vsude smazal a funguje to...
<T> je označení parametrizovaného typu, což je jedna část generik přidaných v Javě 5. Pokud to chcete používat, musíte kompilátoru i IDE říct, že jde o kód pro Javu verze 1.5 nebo 1.6. Pokud píšete v Javě 5 nebo vyšší (doporučuju, pokud nemáte nějaký vážný důvod zůstávat u 1.4; a Java 6 je lepší než pětka, jsou tam vylepšené některé věci ve Swingu a další), doporučuju generiky používat, zjednoduší se tím používání vašich tříd (není nutné přetypovávat návratové hodnoty apod.) a zároveň se zvýší typová bezpečnost v době překladu (např. pokud se do kolekce čísel pokusíte strčit String, a používáte správně generiky, ohlásí chybu už překladač, a ne že program spadne až za běhu když se pokusíte tím Stringem násobit).
Docela podrobný úvod do novinek Javy 5 napsal pan Pecinovský v knížce Java 5.0 – Novinky jazyka a upgrade aplikací, která je teď zdarma ke stažení. Zrovna generiky tam nejsou popsané úplně ve všech detailech, ale je tam toho víc, než si normální smrtelník přeje vědět
Dekuji moc za vysvetleneni, mam snad uz posledni dotaz. Proc tam vytvarime to vlastni rozhrani, slo by to i bez neho, ne?
Tiskni
Sdílej: