我已经为我的新python脚本设置了日志记录模块.我有两个处理程序,一个发送文件到一个文件,一个用于电子邮件警报.SMTPHandler设置为以ERROR级别或更高级别邮寄任何内容.
除非SMTP连接失败,否则一切都很好.如果SMTP服务器没有响应或身份验证失败(它需要SMTP身份验证),则整个脚本将终止.
我是python的新手,所以我试图找出如何捕获SMTPHandler正在引发的异常,以便通过电子邮件发送日志消息的任何问题都不会导致我的整个脚本崩溃.由于我也在向日志文件写错误,如果SMTP警报失败,我只想继续,不要停止任何事情.
如果我需要一个"try:"语句,它会绕过logging.handlers.SMTPHandler设置,还是围绕对my_logger.error()的单独调用?
我正在使用Executor [固定线程池]和我自己的ThreadFactory添加一个Looper:
Handler HANDLER = new Handler();
Executor THREADS = Executors.newFixedThreadPool(THREAD_POOL_SIZE, new ThreadFactory() {
@Override public Thread newThread(Runnable runnable) {
return new MyThread(new Runnable() {
@Override public void run() {
Looper.prepare();
runnable.run();
}
});
}
});
private static class MyHandler extends Handler {
public boolean fail;
public void handleMessage(Message msg) {
switch(msg.what) {
case 1:
this.fail = msg.arg1 == 1;
Looper.myLooper().quit();
break;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在运行一个发出网络请求的线程,但如果网络出现故障,我希望向用户显示一条对话框消息.这个过程非常复杂,因为它需要在UI线程中进行AND显示请求.我可以通过简单地向网络线程添加一个循环并等待从UI线程发送消息来等待用户对该对话框的响应.这允许我在一段时间(tryAgain)线程中封装网络请求.一切正常,除非第二次调用Looper.loop()方法(显示第二个网络错误对话框后),并且对话框(在UI线程中)将消息发送到网络线程的处理程序:
THREADS.execute(new Runnable() {
private MyHandler myHandler = new MyHandler();
@Override public void run() …Run Code Online (Sandbox Code Playgroud) 我创建了一个 WinForm 并添加了动态按钮,我如何处理它的事件
public static void Notify()
{
var line = 3;
Form fm = new Form();
fm.Text = "Hello!";
fm.ShowInTaskbar = false;
fm.ShowIcon = false;
fm.MinimizeBox = false;
fm.MaximizeBox = false;
fm.FormBorderStyle = FormBorderStyle.FixedToolWindow;
fm.TopMost = true;
fm.ClientSize = new Size(150, 75 * line/2);
Rectangle workingArea = Screen.PrimaryScreen.WorkingArea;
int left = workingArea.Width - fm.Width-5;
int top = workingArea.Height - fm.Height-4;
fm.Location = new Point(left, top);
fm.StartPosition = FormStartPosition.Manual;
var buttomArray = new Button[line];
for (int i = 0; i …Run Code Online (Sandbox Code Playgroud) 我尝试开发一个简单的定时蜂鸣器,每小时发出一次。对于我使用服务和处理程序的时间,这里是示例:
void onStart(...){
handler.postDelayed(timerRunnable, ONE_HOUR);
}
private Runnable timerRunnable = new Runnable() {
@Override
public void run() {
...beep
handler.postDelayed(timerRunnable, ONE_HOUR);
}
};
Run Code Online (Sandbox Code Playgroud)
但是run()方法将被不确定地触发,我认为它取决于当前的设备使用情况。
我已经尝试使用 TimerTask 和“手动”线程实现相同的场景,但具有相同的不确定性结果。
我有一个Activity适用于所有代码的游戏(活动A).然后我Activity为我的新游戏模式创建一个新的(活动B),即extends活动A.但是,当遇到Toast行时,活动B突然抛出异常(活动A很好地显示Toast):
Can't create handler inside thread that has not called Looper.prepare()
活动B仅覆盖负载级方法,没有任何差别!
给出以下LogCat跟踪,它显示在之前清楚地Handler.removeCallbacks()调用(via MyListener.cancelTimeout()):myTask.run()
08-12 17:29:13.990: VERBOSE/MyListener.setTimeout(2625): TID: 2625, Handler{460a86e8}, myTask@461cc378
08-12 17:29:14.000: VERBOSE/MyListener.cancelTimeout(2625): TID: 2625, Handler{460a86e8}, myTask@461cc378
08-12 17:29:16.010: VERBOSE/myTask.run(2625): TID: 2625, MyTimeoutTask(handleTimeout())
08-12 17:29:16.010: VERBOSE/MyListener.cancelTimeout(2625): TID: 2625, Handler{460a86e8}, myTask@461cc378
08-12 17:29:16.010: VERBOSE/MyListener.handleTimeout(2625): TID: 2625
Run Code Online (Sandbox Code Playgroud)
什么可以解释这个谜?
请注意日志中的确切时间戳:完全相同的Runnable对象(myTask @ 461cc378)正是removeCallbacks() - 在postDelayed()之后的 0.01秒.然后,2.01秒后,它运行()...
有什么可以解释这个?
例如,Android的0.01秒太短,无法计算出订单?
任何调试这个的想法都将非常感激.
我编写了一个处理程序,每隔一段时间调用该方法.我想在destroy()中删除该处理程序.我用的代码如下,In Oncreate()
private final Handler _handler = new Handler();
public int DATA_INTERVAL = 30 * 1000;
Runnable getData;
getData = new Runnable()
{
@Override
public void run()
{
recieveData();
}
};
_handler.postDelayed(getData, DATA_INTERVAL);
Run Code Online (Sandbox Code Playgroud)
在ondestroy()中,我使用,
_handler.removeCallbacks(getData);
Run Code Online (Sandbox Code Playgroud)
但removecallbacks不起作用.它在退出活动后调用.
好的,对于标签,我们得到了ClickHandler,也就是说,当我们点击标签时它会做一些事情.
但我想做一些类似于Right-ClickHandler for Label的东西,即当用户右键单击标签时,它会做一些事情.
有人说将小部件放入DeckPanel并在其上执行RightClick Hanler.但是,如果我们有很多标签,那么
每个标签是否必须放入甲板面板?
如果是这种情况,那么代码可能很复杂,所以我想为标签执行RightClick处理程序,就像我使用普通的ClickHandler一样.怎么办?
我有处理程序的问题.创建后我想向处理程序发送消息,但方法sendEmptyMessage()无法解析.处理程序必须更新自定义列表适配器.
有我的代码:
private Handler mHandler;
mHandler = new Handler() {
@Override
public void close() {}
@Override
public void flush() {}
@Override
public void publish(LogRecord record) {}
public void handleMessage(Message m)
{
catalogAdapter.notifyDataSetChanged();
}
};
mHandler.sendEmptyMessage(0);
Run Code Online (Sandbox Code Playgroud) 老实说,除了相邻的代码行之外,我还不确定这是否可行.但是,我想我会和社区核实一下.
Java 8允许通过Stream API管理其集合.我们以前需要外部迭代的地方,现在我们可以简单地使用:
<Collection>.stream().forEach([expression]);
Run Code Online (Sandbox Code Playgroud)
当我尝试快速格式化大型集合时,这很好,比如,将它输出到BufferedOutputStream或其他目标.我需要做的是在我旁边写一些关于我正在写的内容的信息.到目前为止,我能想到的最好的是:
labelData();
firstNames.stream().sequential().forEach(sz -> reportData(sz));
Run Code Online (Sandbox Code Playgroud)
然而,如果我可以这样的话,那将是非常好的:
firstNames.stream().sequential().
.onOpen(labelData())
.forEach(sz->reportData(sz));
Run Code Online (Sandbox Code Playgroud)
我知道可以使用BaseStream.onClose(Runnable closeHandler)设置一个on-close方法.这种方法是否存在开放?
谢谢你的时间.