我最近一直在研究代码,特别是在内部使用线程的面向组件的代码.这是一个不好的做法.我看到的代码来自一个F#示例,它展示了使用基于事件的编程技术.我不能在版权侵权的情况下发布代码,但它确实启动了自己的线程.这被认为是不好的做法,或者自己编写的代码是否可以完全控制线程创建是否可行.我确实指出,这段代码不是一个可视化组件,而且非常"从头开始构建".
在线程有用的组件创建的最佳实践是什么?
我对此完全是语言不可知的,f#示例可能是在c#或python中.
我担心缺乏对组件运行时间和资源占用的控制,这个例子只是实现了另一个线程,但据我所知,没有什么能阻止这种类型的设计产生尽可能多的线程,到你的程序允许的极限.
我确实想过像对象注入这样的方法,所以第四,但线程很奇怪,因为它们是从组件角度来看纯粹的"动作"而不是"模型,状态,声明"
任何帮助都会很棒.
class base {};
class der : public base{};
der d1;
der d2(d1);
Run Code Online (Sandbox Code Playgroud)
此语句调用类base的默认构造函数,然后复制claas der的构造函数.我的问题是为什么C++没有提供调用基类复制构造函数的功能,同时通过复制派生类的另一个对象来创建派生类的对象
我正确配置Log4j时遇到问题.我希望Log4j能够在午夜时将我的catalina.out文件旋转,如下所示
:log4j.properties:
log4j.rootLogger=INFO, CATALINA
# Define all the appenders
log4j.appender.CATALINA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.CATALINA.File=/var/log/tomcat7/catalina.out
log4j.appender.CATALINA.Append=true
log4j.appender.CATALINA.Encoding=UTF-8
# Roll-over the log once per day
log4j.appender.CATALINA.DatePattern='.'yyyy-MM-dd-HH-mm'.log'
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern =%d{HH:mm:ss} %5p [%t] - %m%n
Run Code Online (Sandbox Code Playgroud)
配置完成后,我重新启动了Tomcat,所有内容都写入:
/var/log/tomcat7/catalina.out
Run Code Online (Sandbox Code Playgroud)
为了测试我的配置,我将当前日期时间更改为23:59:59:
#ls -l /var/log/tomcat7/
-rw-r--r-- 1 tomcat7 tomcat7 5840 4. May 00:00 catalina.out
Run Code Online (Sandbox Code Playgroud)
如你所见,它在午夜没有旋转...(?)
重新启动Tomcat时,它完全正常:
#ls -l /var/log/tomcat7/
-rw-r--r-- 1 tomcat7 tomcat7 5840 4. May 13:37 catalina.out
-rw-r--r-- 1 tomcat7 root 2395 4. May 00:00 catalina.out.*CURRENTDATE*.log
Run Code Online (Sandbox Code Playgroud)
甚至可以在不重启Tomcat的情况下旋转我的日志文件吗?
谢谢,马利
我是Vaadin的新手,并试图了解它是否适合我对webapp项目迁移的需求.实际上我已经在一个简单的目标上浪费了我的时间:拥有固定页眉和页脚的布局,以及中间的可滚动内容.我用我想要的东西做了一个非常基本的小提琴: jsfiddle
这是我提出的主要Vaadin课程:
public class MyVaadinUI extends UI {
// attributes
@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = MyVaadinUI.class, widgetset = "testvaadin.aep.com.AppWidgetSet")
public static class Servlet extends VaadinServlet {
}
@Override
protected void init(VaadinRequest request) {
buildMainLayout();
}
private void buildMainLayout() {
final VerticalLayout mainLayout = new VerticalLayout();
mainLayout.setSizeFull();
//HEADER
final VerticalLayout headerLayout = new VerticalLayout();
final Resource res = new ThemeResource("img/logo.png");
final Image image = new Image(null, res);
headerLayout.addComponent(image);
//CONTENT
final VerticalLayout contentLayout = new …Run Code Online (Sandbox Code Playgroud) 我想知道是否有人能指出我可以阅读关于C#的章节的方向.我对学习感兴趣的是方法调用成本,创建对象的成本等等.
我的目的是更好地了解如何提高应用程序的性能并更好地理解C#语言的工作原理.
参考书最好是一本书,一本书,我可以阅读封面.
计算不同类在堆栈和堆中创建的对象总数的最佳方法是什么。我知道在C ++中,new和delete运算符可以重载,因此,在默认的构造函数和析构函数中,对象数可以随着对象的创建或销毁而增加或减少。
此外,如果我要扩展同一事物来对不同类的对象进行对象计数,那么我可以创建一个哑类并在该类中编写对象计数代码,然后在我创建任何新类时可以从Dummy类派生它。
对于同一问题,是否还有其他最佳解决方案。
我写了一个小实用工具方法,但它总是产生一个ClassCastException,任何想法为什么?以及如何解决它?
<T> T[] subArray(int begin, int end, T[] array) {
int size = end - begin;
Object[] newArray = new Object[size];
for (int i = 0; i < size; i++) {
newArray[i] = array[begin + i];
}
return (T[]) newArray;
}
Run Code Online (Sandbox Code Playgroud)
这是堆栈跟踪:
java.lang.ClassCastException: [Ljava.lang.Object;
at org.robert.distance.framework.FacadeTest.testSubArray(FacadeTest.java:48)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:592)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at …Run Code Online (Sandbox Code Playgroud) 在shell脚本中我希望变量p等于"$@",以便以下两行代码产生相同的结果:
for x in "$p"; do echo $x; done
for x in "$@"; do echo $x; done
Run Code Online (Sandbox Code Playgroud)
如果我这样做p=$@或者p="$@"这不起作用.当命令行参数的名称中有空格时,我找不到这个问题的简单解决方法(组合p="$@"和for x in $p(在$ p周围删除的引号)在没有空格时有效).
我看到一个带有代码片段的演示文稿,其中包含"when"而不是"if".代码看起来像基于JVM的脚本语言,使用缩进而不是"{}"而不是每行都用';'完成
你能给我一个线索,它可能是哪种语言?
java ×3
c# ×2
c++ ×2
bash ×1
catalina ×1
components ×1
f# ×1
footer ×1
generics ×1
header ×1
indentation ×1
inheritance ×1
layout ×1
log4j ×1
mfc ×1
parameters ×1
rotation ×1
shell ×1
tomcat7 ×1
vaadin ×1