我开始用Android 学习画布绘图,我想制作一个简单的应用程序.
在应用程序启动时,所谓的"蛇"开始在屏幕上移动,当用户点击屏幕时,"蛇"会改变方向.
我很容易实现这一点,但有一点问题:
当用户点击屏幕时,蛇有时会在特定时刻改变方向,有时仅在几毫秒之后.因此,用户可以清楚地感觉到该相互作用并不像它应该作为响应,该蛇的确切转折的时刻是相当不可预知的,即使你专心很辛苦.必须有一些其他方式比我更好地做到这一点.
请检查我的代码,我使用带有Runnable的Handler来移动蛇.(在画布上绘图,每次将其设置为视图的背景,即每次使用setContentView设置为我的Activity.
码:
public class MainActivity extends Activity implements View.OnClickListener {
Paint paint = new Paint();
Canvas canvas;
View contentView; ///<The view to set by setContentView
int moveSize; ///<Sze in px to move drawer to draw another square
int leftIndex; ///<Indexes for square drawing
int topIndex;
int rightIndex;
int bottomIndex;
int maxBoundsX; ///<The max number of squares in X axis
int maxBoundsY; ///<The …Run Code Online (Sandbox Code Playgroud) 我有一个运行线程的队列,并希望在执行时公开它的一些数据,以监视进程.
ThreadPoolExecutor提供对其队列的访问,我可以遍历这些对象来调用我的重写toString()方法,但这些只是等待执行的线程.
有没有办法访问当前运行的线程来调用我的方法?或者也许总的来说这个任务有更好的方法?
为了更清楚地说明目的,这里有一些一般性的代码:
public class GetDataTask implements Runnable {
private String pageNumber;
private int dataBlocksParsed;
private String source;
private String dataType;
public GetDataTask(String source, String dataType) {
this.source = source;
this.dataType = dataType;
}
@Override
public void run() {
//do stuff that affects pageNumber and dataBlocksParsed
}
@Override
public String toString() {
return "GetDataTask{" +
"source=" + source +
", dataType=" + dataType +
", pageNumber=" + pageNumber +
", dataBlocksParsed=" + dataBlocksParsed +
'}';
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个代码,当它与我的计算机在同一网络上时,它将返回我的覆盆子的IP.这个想法是让它像Samba一样进行广播(广播解析是最接近原始NetBIOS机制的.基本上,寻找名为Trillian的服务的客户会喊出"哟!Trillian!你在哪里?",等待具有该名称的机器以IP地址回答.来源:Samba团队)
所以这是代码:
public class GetIP {
static String url; //global so I can access it after the threads are finished
public class CheckIP extends Thread {
private String url_test;
public CheckIP(String url_t) {
url_test = url_t;
}
public void run(){
try {
result = getHTML(this.url_test); //result = the response from the GET request to this.url_test
} catch (Exception e) {
}
if(result <is what I want>) {
url = this.url_test
System.out.println("Flag 1");
<I'd like to do something here, preferebly kill …Run Code Online (Sandbox Code Playgroud) 我使用 ScheduledExecutorService 在经过一段时间后将事件重新排队回到消息队列中。现在我需要在触发某个事件后执行该执行器的所有计划的挂起任务。
我已经看到可以取消挂起的任务,但我需要在执行器关闭之前运行所有这些任务。有没有办法做到这一点?或者我应该使用不同的策略来安排此任务。
我相信static main方法中使用的变量也应该也是static如此.问题是我根本不能使用this这种方法.如果我没记错的话,我必须用commnad启动线程myThread = new ThreaD(this).
以下代码产生错误,因为我this在线程启动中使用.我在这做错了什么?
package app;
public class Server implements Runnable{
static Thread myThread;
public void run() {
// TODO Auto-generated method stub
}
public static void main(String[] args) {
System.out.println("Good morning");
myThread = new Thread(this);
}
}
Run Code Online (Sandbox Code Playgroud) 我从一个单独的类中有这个方法,当调用结束时,我的ImageView的颜色从红色变为白色.示例代码如下:
public void endOfCall(){
((Activity)mContext).runOnUiThread(new Runnable(){
@Override
public void run(){
TargetDetails.oncall.setVisibility(View.VISIBLE);
TargetDetails.endcall.setVisibility(View.GONE);
}
});
try{
call.endCall();
}catch (SipException se) {}
call.close();
//this is just a representation; not the actual code
if(true){
Thread.sleep(10000);
}
//new intent here
}
Run Code Online (Sandbox Code Playgroud)
当它进入'if'条件时,问题就开始了,我将Thread.sleep置于其中.在下面的代码执行之前等待10秒
TargetDetails.oncall.setVisibility(View.VISIBLE);
TargetDetails.endcall.setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud)
我想我在这里错过了关于Thread.sleep的一些东西.我只是想摆脱它,但我不确定除此之外的任何其他选择.救命.谢谢.
我想知道是否有办法关闭Java ExecutorService并允许所有提交的任务完成而不阻塞.
更具体地说,我想安排一个Runnable延迟并继续使用代码,而不需要保持ExecutorService对能够关闭它的引用.
以下代码将终止提交的任务,因为它尚未启动:
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(runnable, delay, TimeUnit.MILLISECONDS);
executor.shutdown();
...
Run Code Online (Sandbox Code Playgroud)
虽然此代码将阻塞,直到任务完成:
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(runnable, delay, TimeUnit.MILLISECONDS);
executor.awaitTermination(timeout, TimeUnit.MILLISECONDS);
...
Run Code Online (Sandbox Code Playgroud)
我想要这样的东西:
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(runnable, delay, TimeUnit.MILLISECONDS);
executor.shutdownAfterTerminationWithoutBlocking();
...
code that runs without waiting
Run Code Online (Sandbox Code Playgroud)
我知道这可能使用,Timer但我想知道这是否可能使用ExecutorService
试图了解wait()和notify().我知道线程何时A进入wait()它将被notify()其他线程唤醒.
但究竟会发生什么,如果线程A,B,C去wait()以表示订单?谁会被唤醒notify()?根据我的实验,A线程将首先被唤醒.我是正确的?
这是否意味着系统知道线程的顺序是wait()什么?
假设一个 Java 线程执行一些 I/O 操作,比如使用传统的阻塞 Java I/O 读取文件。
问题是:等待时线程的状态是什么?
我不知道它是 RUNNING(进行一些主动等待)还是 WAITING(也许有某种监视器在文件数据准备好时唤醒线程)。
我怎样才能找到它?
谢谢。
我有一个线程数组列表,如果从 GUI 按下取消按钮,我想停止列表中的所有线程。有没有办法阻止所有这些线程?
List<Thread> threads = new ArrayList<>();
EncryptThread encryptThread = null;
for(int j=0;j<fileEncrytionList.size();j++){
encryptThread = new EncryptThread();
encryptThread.setFilePath(fileEncrytionList.get(j));
encryptThread.setOutPutFile(fileName);
Thread t = new Thread(encryptThread);
t.start();
threads.add(t);
}
if(cancel button pressed) // stop all threads from arraylist
Run Code Online (Sandbox Code Playgroud)