Tag: 等待

Android:在一个单独的线程中输入对话框时Wait()主线程

我正在Android中编写一个用户修改SQL数据库的活动。 UI由用户输入名称的EditText和用户输入该人的吸引力的Seekbar组成。 下面有一堆按钮:添加,编辑,查看,删除。 当用户单击“编辑”按钮时,将显示一个输入对话框,要求用户输入记录编号。 完成后,将加载该记录。 我遇到的问题是inputdialog会显示,而当用户输入记录no时,编辑方法的其余部分将继续进行,以便当用户输入输入时 – 没有任何事情发生,因为该function已经已经完成。 为了解决这个问题,我决定使用multithreading(我没有太多使用经验)。 当按下编辑按钮时,主UI线程被阻止(使用wait() – 这是因为我不希望在用户输入记录ID时UI处于活动状态。)并且输入对话框显示在单独的线程。 输入输入后,将通知线程并继续编辑function的其余部分。 (代码如下)。 问题是,当我在UI线程上调用wait函数时,我收到一条错误,上面写着“对象在wait()之前未被线程锁定”。 如何锁定UI线程? 我知道一般不应该阻止UI线程,但我认为在这种情况下它是可以的,因为我不希望它接受任何用户输入。 谢谢你的帮助。 public class Attractivometer extends Activity implements OnClickListener { private Button buttonAddRecord, buttonEditRecord, buttonSaveChanges; private Button buttonDeleteRecord, buttonViewRecord; private EditText fieldName; private SeekBar seekbarAttractiveness; private String inputFromInputDialog=null; private Thread inputThread; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.Attractivometer); buttonAddRecord […]

如何在Java中延迟MouseOver?

我有一个简短的问题,我希望有人可以帮助我。 请查看以下代码段: public void mouseEntered(MouseEvent e){ //wait 2 seconds. //if no other mouseEntered-event occurs, execute the following line //otherwise restart, counting the 2 seconds. foo(); } 有人可以帮我解决这个问题吗? 我想实现像ToolTip这样的行为:你用鼠标进入一个区域。 如果您的鼠标停留在该位置,请执行某些操作。

Java延迟/等待

如何将while循环延迟到1秒间隔,而不会将运行的整个代码/计算机减慢到一秒钟的延迟(只有一个小循环)。

为什么没有线程等待notify()?

为什么没有线程等待notify() ? 线程启动然后进入等待池,但是在那之后它继续执行。 public class JavaApplication2 { public static void main(String [] args) { ThreadB b = new ThreadB(); synchronized(b) { b.start(); try { System.out.println(“1”); b.wait(); } catch (InterruptedException e) {} System.out.println(“Total is: ” + b.total); } } } class ThreadB extends Thread { int total; @Override public void run() { synchronized(this) { total += […]

如何区分等待(长时间超时)退出通知或超时?

有这个等待声明: public final native void wait(long timeout) throws InterruptedException; 它可以通过InterruptedException或超时退出,或者因为在另一个线程中调用Notify / NotifyAll方法,Exception很容易捕获但是…… 有什么方法可以知道退出原因是超时还是通知? 编辑: 这是一个可行的棘手方式,(虽然我不喜欢它) long tBefore=System.currentTimeMillis(); wait(TIMEOUT); if ((System.currentTimeMillis() – tBefore) > TIMEOUT) { //timeout }

启动Chrome并等待它关闭

题 我想启动Chrome网络浏览器作为访问特定网站的过程,然后等到它关闭。 一种特殊情况是浏览器可能已经打开并运行,因为用户可能已经访问过某个网站。 在这种情况下,浏览器可能会在现有窗口中打开一个新选项卡,新启动的进程将立即终止。 这不应该混淆我的等待过程:要么,我想要一个新的浏览器窗口(如果可以某种方式强制执行,可能通过命令行参数)并等待它关闭,或保持现有的浏览器窗口并等待所有选项卡结果从我的过程关闭。 环境 我认为没关系,但我的编程环境是Java ,你可以假设我知道浏览器的路径。 例 我可以获得预期行为的唯一浏览器是Internet Explorer (叹息)。 在这里,我需要基本上在一个临时文件夹中创建一个新的批处理脚本 start /WAIT “” “C:\Program Files\Internet Explorer\iexplore.exe” -noframemerging http://www.test.com/ 然后我运行批处理脚本而不是直接浏览器,并在等待完成后删除它。 预期的过程 使目标过程更清晰: 我的程序开始了。 我的程序将Chrome浏览器作为单独的进程启动,并提供一个URL作为该进程的参数进行访问。 Chrome浏览器作为新进程异步运行,并访问提供的URL。 到目前为止,这很容易。 启动新进程(Chrome浏览器)后,我自己的程序应该等待所述进程终止。 这是困难的部分,因为 许多现代浏览器启动多个进程。 我需要等待所有这些。 许多现代浏览器可能以某种方式“脱离”我自己启动的进程。 对不起,我不知道一个更好的词,我的意思是:我启动一个进程然后启动另一个进程并立即终止,而另一个进程继续运行。 如果我等待我的程序最初启动的浏览器进程,则在浏览器仍处于打开状态时等待将完成。 上面的一个特例是在许多浏览器中实现的选项卡式浏览:如果浏览器在我启动时已经打开(在用户启动的单独进程中),我新启动的浏览器进程可能会简单地传达URL以访问现有流程并终止。 当我的程序认为她已关闭浏览器时,用户仍在我提供的URL上。 通过指定特殊的命令行参数(例如IE的noframemerging可能会禁止此问题。 一旦浏览器终止或者与我提供的URL相关的所有标签都已关闭,我的程序将停止等待,而是继续开展业务。 用例是我有一个可以在本地运行或在服务器上运行的Web应用程序。 如果它在本地运行,它将启动Web服务器,然后打开浏览器以访问条目页面。 关闭浏览器后,该Web应用程序也应该关闭。 这对于Internet Explorer来说是可靠的,对于所有其他情况,用户必须关闭浏览器,然后明确地关闭Web应用程序。 因此,如果我能够可靠地等待Chrome完成,这将使用户体验更好。 方案偏好: 解决方案按以下顺序排列 任何与纯Java JRE一起提供的东西。 这包括浏览器的特殊命令行参数。 需要我做的事情,例如,创建批处理脚本(例如在IE的情况下)。 任何需要第三方开源库的东西。 任何需要3rth党闭源图书馆的东西。 任何独立于平台的答案(同时适用于Windows和Linux)都优先于平台相关的答案。 理由:在理想情况下,我想知道究竟是做了什么,并将其包含在我自己的代码中。 […]

Java线程:等待并通知方法

我有一个调用wait方法的线程,只能在从其他类调用notify方法时唤醒: class ThreadA { public static void main(String [] args) { ThreadB b = new ThreadB(); b.start(); synchronized(b) { try { System.out.println(“Waiting for b to complete…”); b.wait(); } catch (InterruptedException e) {} System.out.println(“Total is: ” + b.total); } } } class ThreadB extends Thread { int total; public void run() { synchronized(this) { for(int i=0;i<100;i++) […]

启动Firefox并等待它关闭

题 我想启动Firefox Web浏览器作为访问特定网站的过程,然后等到它关闭。 一种特殊情况是浏览器可能已经打开并运行,因为用户可能已经访问过某个网站。 在这种情况下,浏览器可能会在现有窗口中打开一个新选项卡,新启动的进程将立即终止。 这不应该混淆我的等待过程:要么,我想要一个新的浏览器窗口(如果可以某种方式强制执行,可能通过命令行参数)并等待它关闭,或保持现有的浏览器窗口并等待所有选项卡结果从我的过程关闭。 环境 我认为没关系,但我的编程环境是Java ,你可以假设我知道浏览器的路径。 例 我可以获得预期行为的唯一浏览器是Internet Explorer (叹息)。 在这里,我需要基本上在一个临时文件夹中创建一个新的批处理脚本 start /WAIT “” “C:\Program Files\Internet Explorer\iexplore.exe” -noframemerging http://www.test.com/ 然后我运行批处理脚本而不是直接浏览器,并在等待完成后删除它。 预期的过程 使目标过程更清晰: 我的程序开始了。 我的程序将Firefox浏览器作为单独的进程启动,并提供一个URL作为该进程的参数进行访问。 Firefox浏览器作为新进程异步运行,并访问提供的URL。 到目前为止,这很容易。 启动新进程(Firefox浏览器)后,我自己的程序应该等待所述进程终止。 这是困难的部分,因为 许多现代浏览器启动多个进程。 我需要等待所有这些。 许多现代浏览器可能以某种方式“脱离”我自己启动的进程。 对不起,我不知道一个更好的词,我的意思是:我启动一个进程然后启动另一个进程并立即终止,而另一个进程继续运行。 如果我等待我的程序最初启动的浏览器进程,则在浏览器仍处于打开状态时等待将完成。 上面的一个特例是在许多浏览器中实现的选项卡式浏览:如果浏览器在我启动时已经打开(在用户启动的单独进程中),我新启动的浏览器进程可能会简单地传达URL以访问现有流程并终止。 当我的程序认为她已关闭浏览器时,用户仍在我提供的URL上。 通过指定特殊的命令行参数(例如IE的noframemerging可能会禁止此问题。 一旦浏览器终止或者与我提供的URL相关的所有标签都已关闭,我的程序将停止等待,而是继续开展业务。 用例是我有一个可以在本地运行或在服务器上运行的Web应用程序。 如果它在本地运行,它将启动Web服务器,然后打开浏览器以访问条目页面。 关闭浏览器后,该Web应用程序也应该关闭。 这对于Internet Explorer来说是可靠的,对于所有其他情况,用户必须关闭浏览器,然后明确地关闭Web应用程序。 因此,如果我能够可靠地等待Firefox完成,这将使用户体验更好。 方案偏好: 解决方案按以下顺序排列 任何与纯Java JRE一起提供的东西。 这包括浏览器的特殊命令行参数。 需要我做的事情,例如,创建批处理脚本(例如在IE的情况下)。 任何需要第三方开源库的东西。 任何需要3rth党闭源图书馆的东西。 任何独立于平台的答案(同时适用于Windows和Linux)都优先于平台相关的答案。 […]