根据我的知识和研究,synchronizedJava中的关键字允许同步方法或代码块语句来处理多线程访问.如果我想在多线程环境中锁定文件以进行写入,我必须使用Java NIO包中的类来获得最佳结果.昨天,我提出了一个关于为文件I/O操作处理共享servlet的问题,并且BalusC注释很好地帮助解决了这个问题,但是这个答案中的代码让我感到困惑.我不是要求社区"烧掉那个帖子"或"让他们贬低他"(注意:我没有投票或任何事情,我没有反对的答案),如果代码片段可以,我要求解释被认为是一种很好的做法
private static File theFile = new File("theonetoopen.txt");
private void someImportantIOMethod(Object stuff){
/*
This is the line that confuses me. You can use any object as a lock, but
is good to use a File object for this purpose?
*/
synchronized(theFile) {
//Your file output writing code here.
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用p:graphicImage标记在primefaces中动态显示图像,如下所示:
<p:graphicImage value="#{submissionBean.contestImage}">
<f:param name="imageName"
value="#{contestBean.createContest.submissions[0].fileName}" />
</p:graphicImage>`
Run Code Online (Sandbox Code Playgroud)
托管bean如下:
@ManagedProperty("#{param.imageName}")
private String imageName;
public String getImageName()
{
return imageName;
}
public void setImageName(String imageName)
{
this.imageName = imageName;
}
private StreamedContent contestImage;
public StreamedContent getContestImage()
{
FacesContext context = FacesContext.getCurrentInstance();
if (imageName == null)
imageName = Constants.SUBMISSION_FILE_DIR + "/" + "sacxzx_asdsdaas_icon.png";
if (context.getRenderResponse())
{
// So, we're rendering the view. Return a stub StreamedContent so
// that it will generate right URL.
return new DefaultStreamedContent();
}
else
{
return new …Run Code Online (Sandbox Code Playgroud) 所有调用实例的运行时类型都是D,因此,F()的所有调用都应该是在D中声明的F()方法.
using System;
class A
{
public virtual void F() { Console.WriteLine("A.F"); }
}
class B: A
{
public override void F() { Console.WriteLine("B.F"); }
}
class C: B
{
new public virtual void F() { Console.WriteLine("C.F"); }
}
class D: C
{
public override void F() { Console.WriteLine("D.F"); }
}
class Test
{
static void Main() {
D d = new D();
A a = d;
B b = d;
C c = d;
a.F();
b.F();
c.F();
d.F();
} …Run Code Online (Sandbox Code Playgroud) 我正在开发一个与扫描仪交互的应用程序(Java Applet).我知道我需要一个Twain库或WIA库才能在Windows中运行.但我不确定两者的区别是什么?我想使用这个库:
JAR文件链接坏了所以我从这里得到它. http://rsbweb.nih.gov/ij/plugins/twain-scan.html
和DLL来自这里:http://sourceforge.net/projects/twain-dsm/? source = dlp
但是,它没有检测到来源.这是错误日志:
我在64位机器上.有人有成功吗?
TWAIN规范太长,无法遵循,我没有找到任何有关WIA实施的资源.
非常感谢任何帮助/指针/资源.
在意识到我完全忽略了MVC模式后,我试图在具有Swing视图的应用程序中使用该概念.我现在已经阅读了关于MVC主题的大部分帖子,但仍然有点困惑,因为它对我来说太复杂了,我想我需要一些基本的澄清,所以我不会出错路径.
我也想知道在实际项目中使用MVC有多常见.许多在线教程似乎忽略了控制器并将其与模型混合在一起,而我对XSTL的业务逻辑功能感到困惑.为什么要从JSP视图中寻址数据源?
抛开这些想法,我的正确问题是:
如果你有一个Swing组件,那么该Swing类中的事件监听器是否应该通过在POJO控制器类中调用(可能是静态的?)方法来更新组件状态,而POJO控制器类又从模型中获取适当的业务逻辑,该模型由POJO组成类层次结构和相关的持久性?
我们在项目中使用JavaServer Faces 2.2(Mojarra 2.2.1).我注意到一些奇怪的事 在reporting.xhtml我使用f:metadata新f:viewAction浏览器的页面上,在这种情况下,Safari显示以下查询字符串:
reporting.jsf?jftfdi=&jffi=reporting%3Ffaces-redirect%3Dtrue
Run Code Online (Sandbox Code Playgroud)
这是什么巫术?jftfdi和jiffi做的参数是什么?他们的目的是什么?
我可以使用Serializable接口ObjectOutputStream和ObjectInputStream类来使用Java序列化/反序列化,并且可能在实现Prototype模式的有效实现的类中添加readObject和writeObject使用它们Serializable吗?
这个问题不是要讨论使用复制构造函数是否优于序列化/反序列化.
我知道Prototype Pattern概念(来自维基百科,强调我的):
原型模式是软件开发中的创新设计模式.当要创建的对象类型由原型实例确定时使用它,该实例被克隆以生成新对象.此模式用于:
避免客户端应用程序中的对象创建者的子类,就像抽象工厂模式那样.
避免以标准方式创建新对象的固有成本(例如,使用'new'关键字),当它对于给定的应用程序来说过于昂贵时.
从这个Q/A:Java核心库中的GoF设计模式的例子,BalusC解释说,Java中的原型模式Object#clone只有在类实现Cloneable接口(标记接口类似于Serializable序列化/反序列化对象)时才能实现.使用这种方法的问题在博客文章/相关Q/As中注明如下:
因此,另一种方法是使用复制构造函数来克隆您的对象(DIY方式),但这无法实现我上面强调的文本的原型模式:
避免以标准方式创建新对象的固有成本(例如,使用'new'关键字)
AFAIK创建对象而不调用其构造函数的唯一方法是通过反序列化,如此问题的接受答案的示例中所述:在序列化和反序列化期间如何调用构造函数?
所以,我只是询问是否使用对象反序列化ObjectOutputStream(并知道你正在做什么,将必要的字段标记为transient并理解该过程的所有含义)或类似的方法将是Prototype Pattern的正确实现.
注意:我不认为解组XML文档是这种模式的正确实现,因为它调用了类构造函数.也可能在解组JSON内容时也会发生这种情况.
人们会建议使用对象构造函数,在使用简单对象时我会介意这个选项.这个问题更倾向于深度复制复杂的对象,我可能有5个级别的对象要克隆.例如:
//fields is an abbreviation for primitive type and String type fields
//that can vary between 1 and 20 (or more) declared fields in the class
//and all of them will …Run Code Online (Sandbox Code Playgroud) java serialization design-patterns deserialization prototype-pattern
所以,我有一个使用Weld 1.2进行依赖注入的基本Java SE程序.
一切正常,直到我将Hibernate放入混合中,并使用以下pom.xml依赖项:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
<dependency>
<groupId>org.jboss.weld.se</groupId>
<artifactId>weld-se</artifactId>
<version>2.2.4.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.6.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
Hibernate是添加的依赖项,使其中断.这是我的入门课程:
public class EntryPoint {
public static void main( String[] ARGV ) {
Weld weld = new Weld();
WeldContainer container = weld.initialize();
Application application = container.instance().select(Application.class).get();
application.testFetch();
weld.shutdown();
}
}
Run Code Online (Sandbox Code Playgroud)
当我在包含Hibernate依赖项后尝试运行它时,这是我的输出:
Sep 11, 2014 11:13:44 PM org.jboss.weld.bootstrap.WeldStartup <clinit>
INFO: WELD-000900: 2.2.4 (Final)
Sep 11, 2014 11:13:44 PM org.jboss.weld.bootstrap.WeldStartup startContainer
INFO: WELD-000101: Transactional services not available. Injection of @Inject UserTransaction not available. …Run Code Online (Sandbox Code Playgroud) 我在eclipse中缺少MySQL和其他连接配置文件,因此JBoss服务器会抛出错误.因声誉无法发布图片;)
我只有:
使用Eclipse Kepler和jboss eap 6.1 - 我的PC上已经建立了MySQL服务器.
有一个外部程序可以创建XML文件,但创建可能需要一段时间.我需要我的Java程序等到文件存在之后再继续.
我一直在阅读有关同步块的内容,我读到我可以这样做:
synchronized(this) {
while (!file.exists) { this.wait(); }
}
Run Code Online (Sandbox Code Playgroud)
说实话,我对同步任务并不是很了解,所以我想知道我是否在正确的轨道上,或者我是否已经离开了.