(通过所有意味着重新标记相关技术:我不知道他们是谁:)
我可能会在稍后提出更详细的问题,关于具体的细节但是现在我正试图抓住"大局":我正在寻找一种在Windows上枚举"真实可见窗口"的方法.通过"真实可见窗口"我的意思是:用户称之为"窗口".我需要一种方法来获取所有这些可见窗口的列表,按Z顺序.
请注意,我就真的需要做到这一点.我已经在OS X上完成了它(这是一个非常令人头痛的问题,特别是如果你想支持OS X 10.4,因为OS X没有方便的Windows API),现在我需要在Windows下完成它.
这是一个例子,假设屏幕上有三个可见窗口,如下所示:
+------------------------------------------+
| |
| +=============+ |
| | | |
| | A +--------------------------+
| | | |
| C | | B |
| | +--------------------------+
| | | |
+-----------| |----------------+
| |
+-------------+
Run Code Online (Sandbox Code Playgroud)
然后我需要找回这样的列表:
windows B is at (210,40)
windows A is at (120,20)
windows C is at (0,0)
Run Code Online (Sandbox Code Playgroud)
然后,如果用户(或OS)将窗口A带到前面,它将变为:
+------------------------------------------+
| |
| +=============+ |
| | | |
| | A |---------------------+
| | …
Run Code Online (Sandbox Code Playgroud) 我在独立模式下运行Tomcat."独立"部分非常重要:我不会在Tomcat面前安装Apache.
在我的问题中,关于如何实现"web bug",我得到了一个很好的答案:Java webapp:如何实现web bug(1x1像素)?
但答案是:
在您的访问日志中,您可以计算您的jpg - 输出应为"
127.0.0.1 - - [10/Jun/2010:11:38:53 +0530]"GET /mywebapp/jsp/invisible.jpg?1276150133362 HTTP/1.1"200 991
但是,正如我所担心的,我找不到这样的日志.
... $ cat apache-tomcat-6.0.26/logs/*| grep GET | wc -l
0
有很多日志.我的webapp的自定义日志肯定会被记录下来.
所以我有一些相关的问题:
"Tomcat独立"是否默认记录每个HTTP GET请求?
如果是,默认情况下记录的每个HTTP GET请求在哪里?(我怎么能找到他们自己?)
如果不是,可以将"Tomcat standalone"配置为记录每个HTTP GET请求吗?
请注意,我知道在我的情况下,我可以添加自定义日志记录以及我的web bug .jsp并在日志中搜索它,但这不是我的问题.
我的问题是关于Tomcat如何独立(再一次,独立非常重要)处理所有HTTP GET请求的日志记录.
我只是在Webapp中有一点惊喜,我在.jsp页面中使用EL.
我添加了一个布尔属性并抓住了我的头,因为我已经命名了一个布尔"isDynamic",所以我可以这样写:
<c:if test="${page.isDynamic}">
...
</c:if>
Run Code Online (Sandbox Code Playgroud)
我发现哪个更容易阅读:
<c:if test="${page.dynamic}">
...
</c:if>
Run Code Online (Sandbox Code Playgroud)
但是.jsp无法编译,错误如下:
javax.el.PropertyNotFoundException: Property 'isDynamic' not found on type com...
Run Code Online (Sandbox Code Playgroud)
我发现我的IDE(我花了一些时间注意它),在生成getter时,生成了一个名为的方法:
isDynamic()
Run Code Online (Sandbox Code Playgroud)
代替:
getIsDynamic()
Run Code Online (Sandbox Code Playgroud)
一旦我通过getIsDynamic()手动替换了isDynamic(),一切都运行正常.
所以我在这里有两个问题:
使用"is"启动布尔属性的名称是不是很糟糕?
不管是不是坏了,IntelliJ是否通过自动生成名为isDynamic而不是getIsDynamic的方法犯了错误?
我有这个,这是有效的:
<c:choose>
<c:when test="${sometest}">
Hello, world!
</c:when>
<c:otherwise>
<fmt:message key="${page.title}" />
</c:otherwise>
</c:choose>
Run Code Online (Sandbox Code Playgroud)
我想把它改成这个:
<c:choose>
<c:when test="${sometest}">
<c:set var="somevar" scope="page" value="Hello, world!"/>
</c:when>
<c:otherwise>
<c:set var="somevar" scope="page" value="<fmt:message key="${page.title}">"
</c:otherwise>
</c:choose
Run Code Online (Sandbox Code Playgroud)
但当然以下行不正确:
<c:set var="somevar" scope="page" value="<fmt:message key="${page.title}">"
Run Code Online (Sandbox Code Playgroud)
如何为somevar变量分配调用fmt:message产生的字符串?
我正在写一个小脚本,在几百个PNG文件上调用"PNGOUT"工具.我只是这样做:
find $BASEDIR -iname "*png" -exec pngout {} \;
Run Code Online (Sandbox Code Playgroud)
然后我看着我的CPU显示器,注意到只使用了一个核心,这很可悲.
在双核,四核,八核和六核(?)核心桌面的这个时代,我如何简单地将此任务与Bash并行化?(这不是我第一次有这样的需求,因为很多这些工具都是单线程的......我已经有了mp3编码器的情况).
只是在后台运行所有pngout吗?我的find命令会如何?(我不太确定如何混合查找和'&'字符)
我有三百张图片,这意味着要在三百个流程之间进行交换,这似乎不太好看!
或者我应该在"nb dirs"中复制我的三百个文件,其中"nb dirs"将是核心数,然后同时运行"nb finds"?(这会足够接近)
但是我该怎么做呢?
(下面的示例代码是自包含且可运行的,您可以尝试它,它不会崩溃您的系统:)
Tom Hawtin在这里评论了这个问题:为什么人们在事件队列上运行Java GUI
那:
EDT不太可能崩溃.在EDT调度中抛出的未经检查的异常被捕获,转储并且线程继续.
有人可以解释我这里发生了什么(每次你点击"抛出一个未经检查的异常"按钮,有意地执行除以零):
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class CrashEDT extends JFrame {
public static void main(String[] args) {
final CrashEDT frame = new CrashEDT();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing( WindowEvent e) {
System.exit(0);
}
});
final JButton jb = new JButton( "throw an unchecked exception" );
jb.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) {
System.out.println( "Thread ID:" + Thread.currentThread().getId() );
System.out.println( 0 …
Run Code Online (Sandbox Code Playgroud) 我有一个非常有趣(至少对我来说)的问题需要解决(而且,不,它不是功课).它等同于:您需要确定用户在他的计算机前面的"会话"和"会话开始和结束时间".
您可以获得进行任何用户交互的时间以及最长的不活动时间.如果在两个用户输入之间经过的时间大于或等于不活动时间,则它们是不同会话的一部分.
基本上我得到的输入是这样的(输入没有排序,我宁愿在确定会话之前不对它们进行排序):
06:38
07:12
06:17
09:00
06:49
07:37
08:45
09:51
08:29
Run Code Online (Sandbox Code Playgroud)
而且,比如说,一段时间不活动30分钟.
然后我需要找到三个会话:
[06:17...07:12]
[07:37...09:00]
[09:51...09:51]
Run Code Online (Sandbox Code Playgroud)
如果不活动时间设置为12小时,那么我只会找到一个重要的会话:
[06:17...09:51]
Run Code Online (Sandbox Code Playgroud)
我怎么能简单地解决这个问题?
有一个最短的有效不活动时间,大约15分钟.
我之前不想排序的原因是我会获得大量数据并且只将它们存储在内存中会有问题.但是,大多数这些数据应该是相同会话的一部分(与数据量相比,会话数量相对较少,可能是每次会话数千比1 [数千个用户输入]).
到目前为止,我正在考虑读取输入(例如06:38)并定义间隔[data-max_inactivity ... data + max_inactivity],并且对于每个新输入,使用二分法(log n)搜索来查看它是否下降在已知间隔或创建新间隔.
我会为每个输入重复此操作,使解决方案n登录 AFAICT.此外,好处是它不会使用太多内存,因为它只会创建间隔(并且大多数输入将落入已知间隔).
此外,每次如果落入已知间隔,我必须更改间隔的下限或上限,然后查看是否需要与下一个间隔"合并".例如(最长不活动时间为30分钟):
[06:00...07:00] (because I got 06:30)
[06:00...07:00][07:45...08:45] (because I later got 08:15)
[06:00...08:45] (because I just received 07:20)
Run Code Online (Sandbox Code Playgroud)
我不知道描述是否非常清楚,但这就是我需要做的.
这样的问题有名字吗?你会怎么解决它?
编辑
如果我打算按照我计划的方式解决它,我对知道应该使用哪种数据结构非常感兴趣.我需要log n搜索和插入/合并功能.
我想将信息添加到堆栈跟踪/异常.
基本上我现在有类似的东西,我真的很喜欢:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.so.main(SO.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke
Run Code Online (Sandbox Code Playgroud)
但是,我想捕获该异常并向其添加其他信息,同时仍具有原始堆栈跟踪.
例如,我想拥有:
Exception in thread "main" CustomException: / by zero (you tried to divide 42 by 0)
at com.so.main(SO.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke
Run Code Online (Sandbox Code Playgroud)
所以基本上我想要捕获ArithmeticException并重新抛出一个CustomException(在这个例子中添加"你试图将42除以0"),同时仍然保持堆栈跟踪不受原始ArithmeticException的影响.
在Java中执行此操作的正确方法是什么?
以下是正确的:
try {
....
} catch (ArithmeticException e) {
throw new CustomException( "You tried to divide " + x + " by " + y, e );
}
Run Code Online (Sandbox Code Playgroud) 如果我真的想做类似的事情,我可以在JTabbedPane选项卡中放置一个JProgressBar(或它的等价物)吗?(我的意思是,不在标签本身,
我该怎么办呢?
编辑 我真的想把进度条放在标签的标题中,而不是标签本身.
这是一些ascii艺术:
----------------------------------------------------
| Tab 1 || Tab 2||Tab-with-progress-bar||Tab 4|
----------- --------------------------------
' '
' '
' '
' '
' '
' '
' '
' '
----------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
因此,它实际上是"选项卡2",目前可见,但我希望在第三个选项卡的标题中显示进度条(或等效项).
编辑2
这必须适用于Java 1.5:这必须适用于无数MacOS 10.4和MacOS 10.5 Apple计算机,这些计算机永远不会配备Java 6(有些人会这样做,有些人不会这样做:而且很多人都不会这样做,这不是我的呼叫)
在Java Concurrency In Practice一书中,它解释了"有效不可变"对象与可变对象并发性的优点.但它没有解释"有效不可变"对象在真正不可变对象上提供的优势.
我不明白:在你决定安全地发布一个"有效不可变"的对象的那一刻,难道你不能总是构建一个真正不可变的对象吗?(而不是做你的"安全发布",你建立一个真正不可变的对象,就是这样)
当我正在设计类时,我无法看到我无法始终构建一个真正不可变对象的情况(如果需要使用委托等来构建其他包装对象,当然这些对象本身就是不可改变的)我此刻决定"安全地发布".
那么"有效不可变"的对象和他们的"安全出版物"只是一个糟糕的设计或糟糕的API的情况?
你会在哪里被迫使用一个有效的不可变对象,并被迫安全地发布它,你无法建立一个更优越的真正不可变对象?
java ×8
el ×2
exception ×2
jsp ×2
algorithm ×1
bash ×1
concurrency ×1
immutability ×1
jprogressbar ×1
jstl ×1
jtabbedpane ×1
logging ×1
swing ×1
tomcat ×1
windows ×1