Tag: multithreading

JTextFields在JPanel上的活动绘图之上,线程问题

有没有人曾经试图使用Swing构build一个适当的多缓冲渲染环境, 在其上面可以添加Swing用户界面元素 ? 在这种情况下,我有一个在背景上绘制的animation红色矩形。 背景不需要每一帧更新,所以我把它渲染到一个BufferedImage上,只重绘清除矩形前一个位置所需的部分。 请参阅下面的完整代码,这扩展了上一个线程中的@trashgod给出的示例。 到现在为止还挺好; animationstream畅,CPU使用率低,不闪烁。 然后,我将JTextField添加到Jpanel(通过单击屏幕上的任何位置),然后通过在文本框内单击来关注它。 清除矩形的前一个位置现在在每个光标闪烁时都失败,请参阅下面的图像。 我很好奇,如果有人知道为什么会发生这种情况(Swing不是线程安全的?图像被asynchronous绘制?)以及在什么方向寻找可能的解决scheme。 这是在Mac OS 10.5,Java 1.6上 JPanel重绘失败http://www.arttech.nl/javaredrawerror.png import java.awt.Color; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.Insets; import java.awt.Rectangle; import java.awt.Transparency; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedImage; import javax.swing.JFrame; import javax.swing.JPanel; import […]

如何停止BackgroundWorker窗体的closures事件?

我有一个窗体,产生一个BackgroundWorker,应该更新窗体自己的文本框(主线程),因此Invoke((Action) (…)); 呼叫。 如果在HandleClosingEvent我只是做bgWorker.CancelAsync()然后我得到ObjectDisposedException Invoke(…)调用,可以理解的。 但是,如果我坐在HandleClosingEvent和等待bgWorker完成,比.Invoke(…)永远不会返回,也可以理解。 任何想法如何closures此应用程序没有得到例外,或死锁? 以下是简单的Form1类的3个相关方法: public Form1() { InitializeComponent(); Closing += HandleClosingEvent; this.bgWorker.RunWorkerAsync(); } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { while (!this.bgWorker.CancellationPending) { Invoke((Action) (() => { this.textBox1.Text = Environment.TickCount.ToString(); })); } } private void HandleClosingEvent(object sender, CancelEventArgs e) { this.bgWorker.CancelAsync(); /////// while (this.bgWorker.CancellationPending) {} // deadlock }

在函数调用超时

我正在调用Python中的一个函数,我知道这个函数可能会停顿并迫使我重新启动脚本。 我该如何调用函数,或者如何包装它,如果这个过程需要5秒以上的时间,那么脚本将会取消它并执行其他操作?

如何在PHP应用程序中使用multithreading

有没有一种在PHP中实现multithreading模型的现实方式,无论是真的,还是只是模拟它。 一段时间以来,build议您可以强制操作系统加载PHP可执行文件的另一个实例,并处理其他同时进程。 这个问题是当PHP代码完成执行PHP实例时仍然保留在内存中,因为没有办法从PHP中杀死它。 所以如果你模拟了几个线程,你可以想象会发生什么事情。 所以我仍然在寻找一种可以在PHP中完成或模拟multithreading的方法。 有任何想法吗?

同时运行多个AsyncTasks – 不可能?

我试图同时运行两个AsyncTasks。 (平台是Android 1.5,HTC Hero。)但是,只有第一个被执行。 这里有一个简单的片段来描述我的问题: public class AndroidJunk extends Activity { class PrinterTask extends AsyncTask<String, Void, Void> { protected Void doInBackground(String … x) { while (true) { System.out.println(x[0]); try { Thread.sleep(1000); } catch (InterruptedException ie) { ie.printStackTrace(); } } } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); new PrinterTask().execute("bar bar bar"); new PrinterTask().execute("foo […]

如何杀死Java中的线程?

如何杀死Java中的线程?

如何在Python中使用线程?

我想了解Python中的线程。 我已经看过文档和示例,但坦率地说,很多示例都过于复杂,我无法理解它们。 你如何清楚地显示multithreading分工的任务?

Android“只有创build视图层次结构的原始线程才能触及其视图。”

我已经在Android中构build了一个简单的音乐播放器。 每首歌曲的视图都包含一个SeekBar,实现如下: public class Song extends Activity implements OnClickListener,Runnable { private SeekBar progress; private MediaPlayer mp; // … private ServiceConnection onService = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder rawBinder) { appService = ((MPService.LocalBinder)rawBinder).getService(); // service that handles the MediaPlayer progress.setVisibility(SeekBar.VISIBLE); progress.setProgress(0); mp = appService.getMP(); appService.playSong(title); progress.setMax(mp.getDuration()); new Thread(Song.this).start(); } public void onServiceDisconnected(ComponentName classname) […]

StreamCorruptedException:无效的types代码:AC

我的问题是当它试图读取对象的第二次,它会引发exception: java.io.StreamCorruptedException: invalid type code: AC at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1356) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) at Client.run(BaseStaInstance.java:313) java.io.StreamCorruptedException: invalid type code: AC at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1356) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) at Client.run(BaseStaInstance.java:313) 我第一次发送完全相同的对象消息; 但是,当我第二次尝试做同样的事情时,会抛出上面的错误。 我是否需要重新初始化readObject()方法? 我甚至打印出下面一行正在接收的消息对象,它和第一个实例一样正确。 Object buf = myInput.readObject(); 我假设有追加的问题,但我真的没有用于追加。 我只是想每次都读一条新线。 我真的很感谢在修复这个bug方面的一些帮助。 谢谢。 ================================== 在这之前,我只是在run()方法中为套接字创buildinput和输出对象。 对象声明在类的run()方法之外: @Override public void run() { try { sleep((int) 1 * 8000); } catch (Exception e) { e.printStackTrace(); […]

WebBrowser控件在一个新的线程

我有一个列表Uri的,我想要“点击”为了实现这个我试图创build一个新的Web浏览器控制每个Uri。我创build一个新的线程每Uri。我遇到的问题是线程结束之前的文档是完全加载的,所以我从来没有得到使用DocumentComplete事件。我该如何克服这一点? var item = new ParameterizedThreadStart(ClicIt.Click); var thread = new Thread(item) {Name = "ClickThread"}; thread.Start(uriItem); public static void Click(object o) { var url = ((UriItem)o); Console.WriteLine(@"Clicking: " + url.Link); var clicker = new WebBrowser { ScriptErrorsSuppressed = true }; clicker.DocumentCompleted += BrowseComplete; if (String.IsNullOrEmpty(url.Link)) return; if (url.Link.Equals("about:blank")) return; if (!url.Link.StartsWith("http://") && !url.Link.StartsWith("https://")) url.Link = "http://" […]